4. Các mạng neuron & Học sâu
(Deep Learning)
Các mạng neuron hoạt động ở đâu, tại sao, và
sâu đến mức nào. Mô phỏng lấy cảm hứng từ bộ não. Các mạng neuron xoắn (CNN) và
các mạng neuron tái phát (RNN), các ứng dụng thế giới thực.
Với học sâu,
chúng ta sẽ vẫn học một hàm f liên kết đầu vào X với đầu ra Y với sai số tối
thiểu trên dữ liệu kiểm thử, giống như chúng ta đã làm ở các phần trước. Hãy nhớ
“phát biểu bài toán” ban đầu của chúng ta từ phần 2.1 về học có giám sát:
Y = f(X) + ϵ
Đào tạo: máy học f từ dữ liệu đào tạo đã
gán nhãn
Kiểm thử: máy tiên đoán Y từ dữ liệu kiểm
thử chưa gán nhãn
Thế giới thực rất
hỗn độn, vì thế đôi khi f rất phức tạp. Trong các bài toán về ngôn ngữ tự
nhiên, kích cỡ từ vựng lớn có nghĩa là nhiều đặc điểm. Các bài toán về thị giác
thường chứa nhiều thông tin thị giác về các pixel. Tham gia trò chơi đòi hỏi ra
quyết định dựa trên các ngữ cảnh phức tạp với nhiều khả năng có thể xảy ra
trong tương lai. Các kỹ thuật máy học mà chúng ta đã tìm hiểu làm việc tốt khi
dữ liệu của chúng ta không phức tạp đến phát điên, dù cũng không rõ cách thức
chúng khái quát hóa các ngữ cảnh kiểu đó.
Học sâu (deep
learning) thực sự rất giỏi trong việc học hàm f, đặc biệt trong những tình huống
dữ liệu phức tạp. Thực tế, các mạng neuron nhân tạo thường được gọi là các bộ xấp
xỉ hàm tổng quan, vì chúng có khả năng học bất kỳ hàm nào, bất kể nó có uốn éo
thế nào, chỉ với một lớp ẩn đơn.
Hãy nhìn vào bài
toán phân loại ảnh. Chúng ta lấy một bức ảnh làm đầu vào, và đầu ra là một lớp
nào đó (ví dụ: chó, mèo, xe ô tô…)
Về mặt đồ họa, mạng
neuron sâu sẽ giải quyết việc phân loại ảnh kiểu này:
Hình ảnh từ bài post “Deep Learning
Overview” của Jeff Clune trên YouTube
Nhưng thực tế,
đó là một lượng tính toán khổng lồ với hàng triệu thuật ngữ và rất nhiều biến số.
Đầu vào X là một bức ảnh theo thang độ xám được biểu diễn bằng một ma trận độ
sáng của pixel w-by-h. Đầu ra Y là một vector chứa các xác suất xuất hiện của
các lớp có thể xảy ra. Có nghĩa là chúng ta sẽ có đầu ra là khả năng xuất hiện
của mỗi lớp có thể là nhãn đúng của bức ảnh. Và các lớp ở giữa chỉ đang làm
phép nhân ma trận bằng cách tính tổng activations x weights của các phép chuyển
đổi phi tuyến (các hàm activation) sau khi mỗi lớp ẩn cho phép mạng học được một
hàm phi tuyến.
Thật khó mà tin
nổi, bạn có thể dùng đạo hàm giảm (gradient descent) theo chính xác cùng một kiểu
với hồi qui tuyến tính trong phần 2.1 để đào tạo các tham số này theo cách tối
thiểu hóa sai số. Như thế, với rất nhiều ví dụ và nhiều đạo hàm giảm, mô hình
có thể học được cách phân loại các bức ảnh động vật chính xác. Và vỏ hạt trong
vỏ hạt, kiểu đó gọi là “học sâu”.
Học sâu vận hành tốt ở chỗ nào?
Các mạng neuron
nhân tạo thực ra đã xuất hiện đâu đó từ khá lâu. Trong lịch sử, ứng dụng của
chúng được gọi là cybernetics (điều khiển học – xuất hiện trong những năm
1940-1960), rồi connectionism (liên kết học – những năm 1980-1990), sau đó theo
trào lưu gọi là deep learning (học sâu – từ năm 2006) khi các mạng neuron bắt đầu
trở nên “sâu hơn” (theo Goodfellow et al, 2016). Nhưng chỉ gần đây chúng ta mới
thực sự bắt đầu đi sơ qua bề mặt tiềm năng phong phú của chúng.
Như Andrej
Karpathy (Giám đốc AI tại Tesla, người mà chúng tôi coi là Pháp sư của Học sâu)
đã mô tả, nói chung có “4 yếu tố riêng biệt tạo nên AI:
1.
Tính
toán (thời gian đầu có Định luật Moore, GPU, ASIC)
2.
Dữ liệu
(theo dạng thức đẹp đẽ, nó ở đâu đó trên internet – ví dụ ImageNet)
3.
Các giải
thuật (các nghiên cứu và ý tưởng, ví dụ như cột chống nghiêng, CNN, LSTM)
4.
Cơ sở
hạ tầng (phần mềm bên dưới – Linux, TCP/IP, Git, ROS, PR2, AWS, AMT,
TensorFlow…) (Karpathy, 2016)
Trong khoảng hơn
một thập kỷ trước, tiềm năng phong phú của học sâu được mở khóa nhờ các tiến bộ
của (1) và (2), tới lượt nó đã dẫn tới những đột phá trong (3) và (4) – và cứ
thế chu trình lại tiếp tục theo cấp số nhân, trở nên con người hơn là việc chỉ
tập trung vào các mặt trận nghiên cứu về học sâu (tức chỉ nghĩ về những gì bạn
sẽ làm ngay bây giờ thôi!)
Hình minh họa của NVIDIA, nhà sản xuất bộ xử
lí đồ họa (GPU) hàng đầu, các GPU vốn dĩ được xây dựng để chơi game nhưng đã biến
đổi trở nên cực kỳ phù hợp với loại hình tính toán song song mà các mạng neuron
sâu đòi hỏi.
Trong phần còn lại
của phần này, chúng tôi sẽ cung cấp một số nền tảng cơ bản từ sinh học và thống
kê để giải thích chuyện gì xảy ra bên trong các mạng neuron, sau đó sẽ nói tới
vài ứng dụng thú vị của học sâu. Cuối cùng, chúng ta sẽ kết nối tới một số tài
nguyên để bạn có thể tự sử dụng học sâu, ngay cả khi bạn đang ngồi trên giường
với bộ đồ ngủ và chiếc laptop, vẫn nhanh chóng đạt được hiệu năng lớn hơn mức
con người bình thường khi giải quyết một vài kiểu bài toán nhất định.
Lấy cảm hứng từ bộ não (hay chỉ là một kiểu thống kê chăng?) – điều gì diễn
ra bên trong các mạng neuron
Các neuron, học theo đặc điểm, và các lớp trừu tượng
Khi bạn đọc những
từ này, bạn sẽ không kiểm tra từng chữ cái trong mỗi từ, hoặc mỗi pixel tạo nên
mỗi chữ cái, mới có thể hiểu được nghĩa của các từ. bạn đang trừu tượng hóa từ
các chi tiết và nhóm các thứ theo những khái niệm mức cao hơn: các từ, các cụm
từ, các câu, các đoạn văn.
Khả năng nyà kểim tra ccá đặc đểim cấp độ coa hnơ, cho phpé bnạ hiuể
điuề gì đagn xảy ra trnog cuâ nyà khnôg qáu kóh khnă.
Điều tương tự
cũng diễn ra với thị giác, không chỉ ở con người mà cả ở hệ thống thị giác của
động vật nói chung.
Bộ não được tạo
thành từ các neuron. Neuron bắn ra các tín hiệu điện tới các neuron khác sau
khi đã bị “kích hoạt” đủ. Các neuron này đều rất dẻo dai, khi một tín hiệu từ
các neuron khác tới nó lớn bao nhiêu sẽ làm tăng mức độ bị kích hoạt của neuron
lên bấy nhiêu (tức là khối lượng liên kết các neuron với nhau có thể đào tạo được
để tạo ra các liên kết neuron hữu ích hơn, giống như các tham số trong hồi qui
tuyến tính có thể được đào tạo để cải thiện ánh xạ từ đầu vào tới đầu ra).
Minh họa từng khía cạnh của các neuron sinh
học và nhân tạo, dựa trên CS231n của Stanford. Tính tương tự này không thể thực
hiện theo nghĩa đen – các neuron sinh học có thể làm những việc mà các neuron
nhân tạo không thể, và ngược lại – nhưng hiểu được việc lấy cảm hứng từ sinh học
cũng rất có ích. Hãy xem mô tả của Wikipedia về các neuron sinh học so với các
neuron nhân tạo để biết thêm chi tiết.
Các mạng neuron
sinh học của chúng ta được sắp xếp theo kiểu phân cấp, vì thế các neuron nhất định
sẽ làm công việc phát hiện không chỉ những đặc điểm cực kỳ cụ thể của thế giới
quanh ta mà cả những đặc điểm trừu tượng hơn nhiều, ví dụ các mẫu hoặc các phân
nhóm của những đặc điểm ở cấp độ thấp hơn nhiều. Chẳng hạn, vùng mặt dạng nấm
trong hệ thống thị giác của con người được chuyên biệt hóa cho nhận dạng khuôn
mặt.
Ảnh trên: Minh họa việc học các đặc điểm trừu
tượng tăng dần qua NVIDIA. Ảnh dưới: sơ đồ cách thức một mạng neuron nhân tạo lấy
đầu vào là các pixel thô, phát triển các “neuron” trung gian để phát hiện các đặc
điểm cấp độ cao hơn (ví dụ sự hiện diện của cái mũi), và kết hợp các đầu ra tạo
thành kết quả cuối cùng. Minh họa này từ Neural Networks and Deep Learning của
Nielsen, 2017.
Cấu trúc phân cấp
này do các mạng neuron sinh học thể hiện, đã được phát hiện trong những năm
1950 khi 2 nhà nghiên cứu David Hubel và Torsten Wiesel đang nghiên cứu về các
neuron trong vỏ não thị giác của loài mèo. Họ không thể quan sát sự kích hoạt
neuron sau khi cho con mèo tiếp xúc với nhiều kích thích: các đốm đen, các đốm
sáng, vẫy tay, và thậm chí các những bức hình phụ nữ trên tạp chí. Nhưng trong
khi họ đang thất vọng, ngay lúc họ rời một slide khỏi máy chiếu ở góc chéo, họ
nhận thấy một hoạt động thần kinh! Họ phát hiện ra rằng các đường chéo ở một
góc độ rất đặc biệt đã khiến một số neuron nhất định bị kích hoạt.
Điều này có ý
nghĩa cách mạng vì các môi trường trong tự nhiên nói chung đều lắm nhiễu và ngẫu
nhiên (hãy tưởng tượng về một cánh đồng đầy cỏ dại hoặc một vùng đất toàn sỏi
đá). Vì thế khi loài mèo trong tự nhiên nhận thức được một “cạnh”, ví dụ một đường
thẳng nổi bật tương phản với nền, điều này có thể là chỉ dấu cho một đối tượng
hoặc một tạo vật đang nằm trong vùng thị giác. Khi một nhóm neuron cạnh nào đó
bị kích hoạt, các kích hoạt này sẽ kết hợp để tạo ra một kích hoạt còn trừu tượng
hơn nữa, và cứ thế tiếp diễn, cho tới khi sự trừu tượng cuối cùng là một khái
niệm có nghĩa, chẳng hạn như “con chim” hay “con sói”.
Ý tưởng phía sau
một mạng neuron cấp độ sâu chính là bắt chước để tạo thành một hệ thống tương tự
bằng các lớp neuron nhân tạo.
Tại sao các mô hình tuyến tính không hoạt động được
Để hiểu được
khóa học tuyệt vời về deep learning của Stanford, trong cuốn CS231n:
Convolutional Neural Networks and Visual Recognition, hãy tưởng tượng chúng ta
đang muốn đào tạo một mạng neuron biết phân loại các bức ảnh theo đúng nhãn: [“máy
bay”, “ô tô”, “chim”, “mèo”, “nai”, “chó”, “ếch”, “ngựa”, “cừu”, “xe tải”].
Có một cách là
xây dựng một “mẫu”, hay một bức ảnh trung bình của mỗi lớp trong các bức ảnh được
dùng làm ví dụ đào tạo, sau đó sử dụng thuật toán các hàng xóm gần nhất trong
khi kiểm thử để đo khoảng cách giữa các giá trị pixel của mỗi ảnh chưa được
phân loại, theo mỗi mẫu. Cách này không có các lớp trừu tượng. Đó là một mô
hình tuyến tính kết hợp toàn bộ các chiều khác nhau của mỗi kiểu ảnh vào thành
một hình dạng mập mờ sau khi được tính trung bình.
Ví dụ, người ta
có thể lấy tất cả các loại xe ô tô – không cần biết chúng đang quay trái, phải,
ở giữa thế nào và không quan tâm tới màu sắc của chúng – rồi tính trung bình
toàn bộ. Mẫu thu được trông rất lờ mờ và không rõ ràng.
Ví dụ trong tài liệu từ Stanford CS231n:
Convolutional Neural Networks and Visual Recognition, bài giảng số 2.
Dễ nhận thấy mẫu
cho loài ngựa ở trên đã xuất hiện tới 2 cái đầu. Cách này không thực sự giúp gì
cho chúng ta: chúng ta muốn có khả năng phát hiện được con ngựa đang quay mặt
phải hay đang quay mặt trái rõ ràng, rồi nếu có một đặc điểm nào trong số đó được
phát hiện, ta sẽ nói ta đang thấy một con ngựa. Sự linh hoạt này được các mạng
neuron mức độ sâu cung cấp, mà chúng ta sẽ thấy ở phần sau.
Các mạng neuron mức sâu định hướng bài toán phân loại ảnh theo cách sử dụng
các lớp trừu tượng
Nhắc lại những
gì chúng tôi đã giải thích trước đó trong phần này: lớp đầu vao sẽ lấy độ sáng
các pixel của bức ảnh ở dạng thô. Lớp cuối cùng sẽ là một vector đầu ra chứa
các xác suất của các lớp có thể gán nhãn cho bức ảnh (ví dụ xác suất để bức ảnh
là “mèo”, “ô tô”, “ngựa”…)
Nhưng thay vị học
một mô hình tuyến tính đơn giản thể hiện quan hệ đầu vào và đầu ra, chúng ta sẽ
xây dựng các lớp ẩn trung gian trong mạng để học dần dần các đặc điểm ngày một
trừu tượng, điều đó cho phép chúng ta không làm mất sắc thái đối với dữ liệu phức
tạp.
Nguồn: Analytics Vidhya
Chúng ta vừa mô
tả rằng não động vật có thể phát hiện được các đặc điểm trừu tượng, các neuron
nhân tạo trong các lớp ẩn cũng thế, có thể học để phát hiện các khái niệm trừu
tượng – bất kể khái niệm nào, miễn sao hữu ích nhất để thu được thông tin đầu ra
nhiều nhất và tối thiểu hóa sai số đảm bảo tính chính xác của đầu ra (đây là một
thể hiện của kiểu học không giám sát xuất hiện trong mạng neuron).
Điều đó đi kèm với
chi phí cho khả năng có thể giải thích được của mô hình, vì khi bạn thêm vào
càng nhiều lớp ẩn, các neuron sẽ bắt đầu biểu diễn theo hướng ngày càng trừu tượng
hơn, thậm chí các đặc điểm hoàn toàn không thể hiểu nổi – tới lúc bạn có lẽ đã
nghe tới trong học sâu, người ta gọi là “tối ưu hộp đen” (black box
optimization), tức bạn cơ bản chỉ ngẫu nhiên đưa vào cái gì đó rồi xem nó cho
ra thứ gì, mà không cần thực sự phải hiểu chuyện gì xảy ra bên trong.
Hồi qui tuyến
tính có thể giải thích được vì bạn đã quyết định đặc điểm nào sẽ có trong mô
hình. Các mạng neuron mức sâu khó mà giải thích nổi vì các đặc điểm được học và
không được giải thích ở đâu đó bằng tiếng Anh, tiếng Pháp hay tiếng nào đó.
Toàn bộ đều nằm trong sự tưởng tượng của chính cỗ máy.
Một số
khái niệm sâu hơn cần chú ý
-
Các gói phần mềm về học sâu: bạn hầu như không cần làm toàn bộ các phần
của mạng neuron từ đầu vì nhiều thư viện và công cụ sẵn có đã và đang giúp cho
việc xây dựng học sâu trở nên dễ dàng hơn. Có thể kể tới: TensorFlow, Caffe,
Torch, Theano…
-
Các mạng neuron xoắn (CNN): CNN được thiết kế đặc biệt dành cho việc
dùng các hình ảnh làm đầu vào, rất hiệu quả với các tác vụ liên quan tới thị
giác máy tính. Chúng cũng hữu dụng với học sâu tăng cường (deep reinforcement
learning). CNN đặc biệt lấy cảm hứng từ cách thức bộ não thị giác động vật làm
việc, và chúng là trọng tâm của các bài giảng học sâu mà chúng ta vừa tham khảo,
tài liệu CS231n của Stanford.
-
Các mạng neuron tái phát (RNN): RNN dùng bộ nhớ built-in và rất phù hợp với
các bài toán ngôn ngữ. Chúng cũng quan trọng trong học tăng cường
(reinforcement learning) vì chúng cho phép agent theo dõi kịp thời mọi thứ đang
ở đâu và chuyện gì xảy ra đã xảy ra theo thời gian, ngay cả khi các phần tử
hoàn toàn không thể nhìn thấy được. Christopher Olah đã viết một bài đánh giá
tuyệt vời về RNN và LSTM trong lĩnh vực các bài toán ngôn ngữ.
-
Học sâu tăng cường (deep reinforcement
learning): đây là một trong những
lĩnh vực thú vị nhất của nghiên cứu về deep learning, là trung tâm các thành tựu
gần đây như OpenAI đánh bại 2 tay chơi Dota chuyên nghiệp, hay AlphaGo của
DeepMind vượt qua con người trong trò Go (cờ vây). Chúng ta sẽ đào sâu hơn
trong phần 5, nhưng về cơ bản, mục đích là ứng dụng mọi kỹ thuật vào bài toán dạy
một agent tối đa hóa lợi ích. Lĩnh vực này có thể ứng dụng trong bất kỳ ngữ cảnh
có tính ăn thua nào – từ các trò game trong thực tế như Counter Strike hay
Pacman, tới xe tự lái, chứng khoán, hay tới đời thực và thế giới thực (hoàn
toàn thực).
Các ứng dụng của học sâu
Học sâu đang định
hình lại thế giới trong mọi khía cạnh ảo. Dưới đây là một số ví dụ về những thứ
không thể tin nổi mà học sâu có thể làm…
·
Facebook đã đào tạo một mạng neuron tăng cường bằng
bộ nhớ ngắn hạn để trả lời rất thông minh các câu hỏi về tình tiết trong tác phẩm
Chúa tể của Những chiếc nhẫn.
Nghiên cứu từ FAIR (Facebook AI Research) sử dụng các mạng neuron mức
sâu được tăng cường bộ nhớ ngắn hạn riêng biệt để trả lời các câu hỏi về câu
chuyện Chúa tể của Những chiếc nhẫn. Đây là định nghĩa về sử thi.
·
Xe tự lái dùng học sâu cho các tác vụ thị giác
như hiểu được tín hiệu trên đường, phát hiện làn đường, và nhận diện các chướng
ngại vật.
Nguồn: Business Insider
·
Học sâu có thể dùng theo cách hài hước hơn như tạo
ra các tác phẩm nghệ thuật. Một công cụ có tên Neural Style có thể băt chước
phong cách của một nghệ sĩ nào đó cực kỳ ấn tượng và dùng điều đó để pha trộn tạo
ra bức ảnh khác.
Phong cách trong tác phẩm Starry Night (đêm đầy sao) của Van Gogh được
áp dụng vào bức ảnh khuôn viên đại học Stanford, bằng ứng dụng neural style của
Justin Johnson. Tham khảo https://github.com/jcjohnson/neural-style
Các ví dụ đáng chú ý khác:
-
Tiên đoán hoạt tính sinh học cấp phân tử trong
việc nghiên cứu chế tạo thuốc
-
Nhận dạng khuôn mặt và nhận dạng đối tượng để gắn
thẻ cho ảnh và video
-
Tăng cường khả năng tìm kiếm của Google
-
Hiểu và tạo ra ngôn ngữ tự như, ví dụ Google
Translate
-
Robot thám hiểm Sao Hỏa Curiosity tự động lựa chọn
các mẫu đất đá có giá trị thí nghiệm dựa trên khả năng tự kiểm tra bằng thị
giác…
Và còn nhiều, rất nhiều nữa.
Thế là đã xong!
Chúng ta không đi sâu vào cách tạo mạng
neuron trong thực hành vì bạn có thể dễ dàng tự làm điều đó. Dưới đây là một số
tài nguyên thú vị để bắt đầu:
-
Dạo chơi với
kiến trúc của các mạng neuron để xem cấu hình khác nhau ảnh hưởng tới hiệu năng
mạng thế nào với Neural Network Playground của Google.
-
Dậy và chạy
thật nhanh với hướng dẫn này của Google: TensorFlow and Deep learning without a
PhD. Phân loại chữ viết tay chính xác >99%, làm quen với TensorFlow, và học
các khái niệm học sâu chỉ trong 3 giờ.
-
Sau đó, đi
tìm hiểu ít nhất vài bải giảng trong cuốn tài liệu CS231n của Stanford và tự
xây dựng một mạng neuron 2 lớp đầu tiên từ đầu để nắm vững các khái niệm trong
bài viết.
Các tài
nguyên mức độ sâu hơn
Học sâu là một lĩnh vực rộng. Theo đó, chúng
tôi cũng đã dùng những tài nguyên tốt nhất tìm được cho chủ đề này, trong trường
hợp bạn muốn tìm hiểu sâu hơn:
-
Deeplearning.ai:
bài giảng mới về học sâu của Andrew Ng với giáo trình rất dễ hiểu.
-
CS231n:
Convolutional Neural Networks for Visual Recognition: bài giảng về học sâu của
Stanford. Một trong những tài liệu hay nhất chúng tôi từng thấy, với các bài giảng
tuyệt vời và các bài toán minh họa tốt nhất.
-
Deep
Learning & Neural Networks – có thể truy cập được nhưng rất nghiêm ngặt.
-
Deep
Learning Book – cơ bản, nhiều kiến thức toán học
-
Fast.ai –
ít lý thuyết, nhiều ứng dụng và mang tính hộp đen nhiều hơn
-
Xem câu trả
lời của Greg Brockman (CTO của OpenAI) cho câu hỏi “What are the best ways to
pick up Deep Learning skills as an engineer?” trên Quora.
Kế tiếp:
đến lúc chơi vài game rồi!
Cuối cùng, nhưng cực kỳ chắc chắn rằng chưa
phải kết thúc, là phần 5: Học tăng cường.
Vishal Maini
Samer Sabri