06/03/2016
Deep Learning
Yann LeCun, Yoshua Bengio & Geoffrey Hinton
Deep Learning cho phép các mô hình tính toán nhiều lớp có thể học được cách biểu diễn dữ liệu ở nhiều mức độ trừu tượng khác nhau. Phương pháp này đã cải thiện một cách đáng kể chất lượng những giải thuật xử lý trong các bài toán nhận dạng tiếng nói, nhận dạng đồ vật, phát hiện đồ vật và nhiều lĩnh vực khác như thuốc tây và gen. Deep Learning khám phá ra những cấu trúc phức tạp trong các tập dữ liệu lớn bằng cách sử dụng giải thuật backpropagation để hiệu chỉnh các tham số bên trong mô hình; những tham số này dùng để biểu diễn dữ liệu tại mỗi lớp từ sự biểu diễn ở lớp trước đó. Convolutional nets nhiều lớp đã mang lại những đột phá trong xử lý ảnh, xử lý video, tiếng nói và âm thanh, trong khi đó recurrent nets thể hiện ưu điểm đối với các loại dữ liệu tuần tự như chữ viết và tiếng nói.
Machine-learning có vai trò quan trọng trong đời sống chúng ta hiện nay: từ tìm kiếm trang web đến lọc nội dung trên các mạng xã hội đến gợi ý trên các trang mua sắm, machine-learning cũng dần dần xuất hiện trong các sản phẩm tiêu dùng như máy ảnh và điện thoại. Các hệ thống sử dụng machine-learning để nhận dạng đối tượng xuất hiện trong bức ảnh, chuyển tiếng nói thành văn bản, liên kết các mẩu tin hay sản phẩm với nhu cầu của người dùng, và lựa chọn các kết quả tìm kiếm phù hợp. Những ứng dụng này sử dụng ngày càng nhiều một lớp các kĩ thuật gọi là deep learning.
Các kĩ thuật machine-learning truyền thống có nhiều hạn chế đối với việc xử lý dữ liệu ở dạng thô. Trong nhiều thập kỉ, việc xây dựng một hệ thống machine-learning hay nhận dạng mẫu đòi hỏi nhiều công sức và kĩ năng chuyên biệt để thiết kế bộ trích thuộc tính, dùng để chuyển dữ liệu thô (ví dụ các giá trị pixel của ảnh) thành một cách biểu diễn phù hợp hay vector thuộc tính, mà từ đó một hệ thống được huấn luyện, thường là một bộ phân loại, có thể phát hiện hay phân loại các đối tượng đầu vào.
Huấn luyện cách biểu diễn là một tập các phương pháp cho phép một máy tính, khi được cung cấp dữ liệu thô, tự động khám phá ra các cách biểu diễn cần thiết để phát hiện hay phân loại. Deep learning là phương pháp huấn luyện cách biểu diễn dữ liệu ở nhiều mức độ khác nhau, nó bao gồm nhiều khối đơn giản nhưng không tuyến tính mà trong đó mỗi khối sẽ chuyển sự biểu diễn ở mức này (bắt đầu với dữ liệu thô) đến sự biểu diễn ở mức cao hơn, trừu tượng hơn. Bằng cách ghép nối đủ nhiều các phép biến đổi như vậy, chúng ta có thể huấn luyện cho máy tính những hàm vô cùng phức tạp. Trong bài toán phân loại, các lớp biểu diễn ở mức cao sẽ khuếch đại các đặc điểm của đầu vào có vai trò quan trọng cho việc phân loại và loại bỏ các đặc điểm không liên quan. Ví dụ với ảnh, xem như là một ma trận các giá trị điểm ảnh, các thuộc tính được huấn luyện trong lớp biểu diễn đầu tiên nói chung sẽ biểu diễn sự có mặt hay không của các cạnh theo các hướng khác nhau hay vị trí nào đó trong ảnh. Lớp thứ hai thường phát hiện ra các cấu trúc sắp xếp đặc biệt từ các cạnh. Lớp thứ ba có thể gom các cấu trúc này lại để tương ứng với các bộ phận của các đồ vật quen thuộc, và các lớp tiếp theo sẽ phát hiện đồ vật dựa trên sự kết hợp các bộ phận này. Đặc điểm quan trọng của deep learning là những lớp thuộc tính này không được thiết kế bởi con người: chúng được học từ dữ liệu thông qua một quá trình huấn luyện đa nhiệm.
Deep learning đang tạo ra những bước tiến quan trọng trong việc giải các bài toán mà đã làm nản lòng nhiều cố gắng trong lĩnh vực trí tuệ nhân tạo trong rất nhiều năm. Nó đã tỏ ra rất hiệu quả đối với việc khám phá các cấu trúc phức tạp trong dữ liệu nhiều chiều và do đó có thể có nhiều ứng dụng trong nhiều lĩnh vực khoa học, thương mại và quản trị. Bên cạnh việc giành được những kỉ lục đối với nhận dạng ảnh và tiếng nói, deep learning còn vượt qua nhiều kĩ thuật machine-learning khác trong việc dự đoán tác dụng của thuốc, phân tích dữ liệu của máy gia tốc hạt, xây dựng cấu trúc bộ não, và dự đoán ảnh hưởng của các tổ hợp gen và bệnh tật. Có lẽ đáng ngạc nhiên hơn nữa, deep learning đã mang lại những kết quả hết sức hứa hẹn trong việc hiểu ngôn ngữ tự nhiên, đặc biệt là phân loại chủ đề, phân tích cảm xúc, trả lời câu hỏi và dịch.
Chúng tôi nghĩ rằng deep learning sẽ còn gặt hái nhiều thành công hơn nữa trong thời gian ngắn sắp đến bởi vì nó đòi hỏi rất ít sự thiết kế bằng tay, do đó có thể dễ dàng tận dụng khả năng tính toán và lượng dữ liệu sẵn có ngày càng lớn. Những giải thuật và kiến trúc mới đang được phát triển cho deep neural network sẽ càng thúc đẩy xu thế này nhanh hơn nữa.
Supervised learning
Supervised learning là dạng phổ biến nhất của machine-learning, dù có nhiều lớp hay không. Hình dung rằng chúng ta muốn xây dựng một hệ thống phân loại hình ảnh, ví dụ, chứa các nhóm đối tượng như nhà, xe hơi, người và vật nuôi. Trước hết, chúng ta sẽ thu thập một số lượng lớn hình ảnh về nhà, xe hơi, người và vật nuôi; mỗi ảnh sẽ được đánh nhãn theo nhóm tương ứng. Trong quá trình huấn luyện, với mỗi ảnh đưa vào, máy tính sẽ cho ra một vector điểm số, trong đó mỗi điểm số ứng với một nhóm đối tượng. Chúng ta muốn rằng nhóm mong đợi sẽ có điểm số cao nhất trong tất cả các nhóm, nhưng điều này gần như không xảy ra trước khi thực hiện huấn luyện. Chúng ta xét một hàm mục tiêu thể hiện sai số giữa điểm số đầu ra và điểm số mong muốn. Máy tính sau đó sẽ hiệu chỉnh các tham số để giảm sai số này. Các tham số có thể hiệu chỉnh này, thường gọi là weight, là những số thực thể hiện quan hệ đầu vào-đầu ra của máy. Một hệ thống deep-learning thông thường chứa hàng trăm triệu weight và hàng trăm triệu mẫu được đánh nhãn dùng cho việc huấn luyện.
Để hiệu chỉnh weight, giải thuật huấn luyện tính vector gradient; vector gradient này thể hiện sự thay đổi của sai số ứng với thay đổi nhỏ của từng weight. Các weight sẽ được hiệu chỉnh theo hướng ngược với hướng của vector gradient.
Hàm mục tiêu theo các weight, được tính trung bình trên tổng số các mẫu huấn luyện, có thể xem như có dạng thung lũng. Hướng ngược với hướng của vector gradient thể hiện hướng đi xuống đáy thung lũng nhanh nhất, mà ở đó sai số đầu ra sẽ nhỏ.
Trong thực tế, hầu hết đều dùng phương pháp stochastic gradient descent (SGD). Với phương pháp này, chúng ta đưa một số mẫu ở đầu vào, tính toán đầu ra và sai số, tính toán gradient trung bình với các mẫu này, và sau đó hiệu chỉnh các weight. Quá trình này được lặp lại cho nhiều tập mẫu nhỏ được trích ra từ tập dữ liệu huấn luyện cho đến khi giá trị trung bình của hàm mục tiêu không còn giảm nữa. Nó được gọi là stochastic bởi vì mỗi tập mẫu nhỏ cung cấp một ước lượng có nhiễu của giá trị gradient trung bình trên toàn bộ mẫu. Phương pháp đơn giản này lại thường giúp tìm được weight tốt một cách rất nhanh chóng nếu so sánh với những kĩ thuật tối ưu khác phức tạp hơn. Sau khi huấn luyện, hệ thống được đánh giá trên một tập mẫu khác gọi là tập dữ liệu kiểm tra. Điều này nhằm mục đích kiểm tra khả năng tổng quát hóa của hệ thống – đây là khả năng cung cấp những câu trả lời hợp lý đối với những đầu vào mới mà hệ thống chưa gặp trong quá trình huấn luyện.
Nhiều ứng dụng hiện nay của machine learning sử dụng bộ phân loại tuyến tính sau khi đã thực hiện trích thuộc tính bằng tay. Một bộ phân loại tuyến tính hai lớp tính tổng có trọng số của các thành phần của vector thuộc tính. Nếu tổng này lớn hơn một giá trị ngưỡng, đầu vào sẽ được xếp vào một nhóm nào đó.
Từ những năm 1960, chúng ta biết rằng bộ phân loại tuyến tính chỉ có thể chuyển không gian đầu vào thành các miền rất đơn giản, cụ thể là các nửa không gian được phân tách bởi một siêu phẳng. Nhưng những bài toán như nhận dạng ảnh và tiếng nói yêu cầu hàm đầu vào-đầu ra phải bất biến đối với những biến thiên không quan trọng của đầu vào, ví dụ thay đổi về vị trí, hướng hay độ sáng của một vật, hoặc thay đổi về tần số pitch hay giọng của tiếng nói, trong khi phải rất nhạy với những thay đổi nhỏ nhưng có ý nghĩa (ví dụ, khác biệt giữa một con chó sói trắng và một giống chó trắng Samoyed giống chó sói.) Ở mức độ pixel, ảnh của hai con Samoyed ở hai tư thế khác nhau và hai môi trường khác nhau có thể rất khác nhau, trong khi ảnh của một con Samoyed và ảnh một con chó sói ở cùng vị trí và cùng cảnh nền lại có thể rất giống nhau. Một bộ phân loại tuyến tính, hay bất kì bộ phân loại sử dụng ít lớp biểu diễn với dữ liệu thô, có thể không phân biệt được hai ảnh ở trường hợp sau, trong khi xếp hai ảnh của trường hợp trước vào cùng một nhóm. Điều này giải thích tại sao các bộ phân loại ít lớp cần một bộ trích thuộc tính tốt để có thể giải quyết được mâu thuẫn “chọn lọc-bất biến”, nghĩa là cần phải có một cách biểu diễn vừa chọn lọc được các đặc điểm quan trọng để phân loại vừa bất biến với những đặc điểm không quan trọng như tư thế của con vật. Để bộ phân loại tốt hơn, ta có thể sử dụng các thuộc tính không tuyến tính, ví dụ với phương pháp kernel, tuy nhiên những thuộc tính này, như trường hợp dùng với Gaussian kernel, lại không cho phép hệ thống có thể tổng quát hóa tốt với những mẫu khác với mẫu đã dùng cho huấn luyện. Giải pháp thông thường là phải thiết kế bằng tay bộ trích thuộc tính thật tốt, mà điều này cần một kĩ năng đáng kể cũng như hiểu biết sâu sắc về lĩnh vực liên quan. Tuy nhiên, những khó khăn này có thể tránh được nếu như những thuộc tính tốt có thể được học một cách tự động thông qua một quá trình huấn luyện đa nhiệm. Đây chính là ưu điểm nổi bật của deep learning.
Một kiến trúc deep learning chứa nhiều lớp ứng với các khối đơn giản; tất cả (hay hầu hết) các khối này đều được huấn luyện, và nhiều trong số đó thực hiện phép biến đổi vào-ra không tuyến tính. Mỗi khối biến đổi đầu vào để cùng lúc làm tăng tính chọn lọc và tính bất biến trong cách biểu diễn. Với nhiều lớp không tuyến tính, ví dụ từ 5 đến 20, một hệ thống có thể thực hiện được những hàm hết sức phức tạp, vừa nhạy với những chi tiết nhỏ (phân biệt được chó Samoyed và chó sói trắng) vừa bất biến với những biến thiên lớn nhưng không quan trọng như cảnh nền, tư thế, điều kiện chiếu sáng và các vật xung quanh.
Backpropagation để huấn luyện kiến trúc nhiều lớp
Ngay từ những ngày đầu tiên của lĩnh vực nhận dạng mẫu, mục tiêu của các nhà nghiên cứu là thay thế thuộc tính được tính bằng tay bằng mạng nhiều lớp có thể huấn luyện được, nhưng mặc dù đơn giản, mãi đến giữa những năm 1980 giải pháp này mới có thể được hiểu rõ. Như những gì đã thể hiện, kiến trúc nhiều lớp có thể được huấn luyện bằng cách sử dụng phương pháp stochastic gradient descent đơn giản. Miễn là các khối thực hiện các hàm tương đối mượt theo đầu vào và các weight, ta đều có thể tính gradient dùng phương pháp backpropagation. Ý tưởng này được khám phá một cách độc lập bởi nhiều nhóm nghiên cứu khác nhau suốt những năm 1970 và 1980.
Quá trình backpropagation để tính gradient của một hàm mục tiêu theo weight trong mạng nhiều lớp chỉ đơn giản là việc áp dụng quy tắc tính đạo hàm của hàm hợp. Ý tưởng quan trọng là đạo hàm (gradient) của hàm mục tiêu theo đầu vào của một khối nào đó có thể tính bằng cách lan truyền ngược từ gradient theo đầu ra của khối đó (hay là đầu vào của khối tiếp theo.) Phương trình backpropagation có thể áp dụng nhiều lần để lan truyền gradient qua tất cả các khối, bắt đầu từ đầu ra (nơi hệ thống dự đoán kết quả) ngược về đầu vào (nơi dữ liệu được cung cấp.) Một khi các gradient được tính, ta dễ dàng tính được gradient theo weight của từng khối.
Nhiều ứng dụng của deep learning dùng kiến trúc feedforward neural network để huấn luyện việc ánh xạ một đầu vào có kích thước cố định (ví dụ, ảnh) vào một đầu ra có kích thước cố định (ví dụ, xác suất của từng nhóm đối tượng.) Để đi từ lớp này đến lớp khác, một tập các unit tính tổng có trọng số của các đầu vào từ lớp đứng trước, sau đó kết quả này đi qua một hàm không tuyến tính. Hiện tại, hàm không tuyến tính phổ biến nhất là ReLU (rectified linear unit), tức f(z) = max(z,0). Trong những thập kỉ vừa qua, neural net đã dùng những hàm không tuyến tính mượt hơn như tanh(z) hay 1/(1+exp(-z)), nhưng ReLU nói chung vẫn học nhanh hơn rất nhiều trong mạng nhiều lớp, từ đó cho phép huấn luyện deep supervised network mà không cần unsupervised pre-training. Những unit không thuộc lớp ra hay lớp vào được gọi là hidden unit. Các lớp ẩn có thể xem như biến đổi đầu vào một cách không tuyến tính để các nhóm đối tượng trở nên có thể tách biệt một cách tuyến tính ở lớp cuối cùng.
Vào cuối những năm 1990, neural net và backpropagation hầu như bị bỏ rơi trong cộng đồng machine-learning và bị bỏ qua trong cộng đồng thị giác máy tính và nhận dạng tiếng nói. Phần lớn cho rằng để huấn luyện bộ trích thuộc tính nhiều lớp và hữu hiệu mà sử dụng rất ít thông tin tiên nghiệm (prior) là không khả thi. Đặc biệt, phương pháp gradient descent đơn giản có thể dẫn đến trường hợp rơi vào cực tiểu địa phương – mà ở đó không có sự thay đổi nhỏ nào của weight có thể làm giảm sai số trung bình.
Trên thực tế, cực tiểu địa phương hiếm khi là vấn đề với một mạng lớn. Bất kể điều kiện đầu thế nào đi nữa, hệ thống gần như luôn luôn cho lời giải rất gần giống nhau. Những kết quả nghiên cứu lí thuyết và thực nghiệm gần đây rõ ràng cho thấy rằng cực tiểu địa phương nói chung không phải là một vấn đề nghiêm trọng. Thay vào đó, hàm tối ưu chứa rất nhiều điểm yên ngựa, mà ở đó gradient bằng không và mặt cong hướng lên trong hầu hết các hướng và hướng xuống theo những hướng còn lại. Phân tích cho thấy rằng có rất nhiều điểm yên ngựa mà ở đó mặt cong hướng xuống chỉ tại một số rất ít hướng, nhưng hầu hết các điểm này đều có giá trị hàm mục tiêu rất giống nhau. Vì thế, việc giải thuật rơi vào điểm yên ngựa nào cũng không quan trọng lắm.
Quan tâm về deep feedforward network trở nên sôi động trở lại vào khoảng năm 2006 bởi các nhà nghiên cứu từ CIFAR (Canadian Institute for Advanced Research.) Họ đã giới thiệu những phương pháp unsupervised learning có thể tạo các lớp trích thuộc tính mà không cần dữ liệu được đánh nhãn. Mục tiêu trong việc huấn luyện các lớp là làm sao để có thể khôi phục hay mô hình các đặc điểm của bộ trích thuộc tính (hay dữ liệu thô) ở lớp trước đó. Bằng cách pre-training nhiều lớp có độ phức tạp ngày càng tăng với mục tiêu khôi phục này, các weight của một deep network có thể được khởi động với những giá trị phù hợp. Sau đó, một lớp cuối cùng với các unit đầu ra được gắn vào network này và toàn bộ network sẽ được tinh chỉnh dùng backpropagation truyền thống. Hệ thống này hoạt động đặc biệt tốt với việc nhận dạng chữ số viết tay hay phát hiện người đi bộ, nhất là khi số lượng dữ liệu có đánh nhãn rất ít.
Ứng dụng quan trọng đầu tiên của cách pre-training này là trong nhận dạng tiếng nói, và điều này thực hiện được nhờ sự xuất hiện của GPU tốc độ cao cho phép huấn luyện các mạng nhanh hơn từ 10 đến 20 lần. Năm 2009, phương pháp này dùng để ánh xạ các cửa sổ ngắn chứa các hệ số trích ra từ một dạng sóng tiếng nói vào một tập các xác suất ứng với các mẩu tiếng nói khác nhau. Nó đã tạo ra kỉ lục mới trong nhận dạng tiếng nói dùng bộ từ vựng nhỏ và nhanh chóng được phát triển để cho kỉ lục mới với bộ từ vựng lớn. Đến năm 2012, một số phiên bản của deep net từ năm 2009 được phát triển bởi nhiều nhóm xử lý tiếng nói tên tuổi và đã được triển khai trên điện thoại Android. Với tập dữ liệu nhỏ, unsupervised pre-training giúp tránh overfitting, điều này giúp đạt được mức độ tổng quát hóa tốt hơn khi có ít mẫu được đánh nhãn, hoặc trong bối cảnh transfer setting khi mà chúng ta có nhiều mẫu đối với source nhưng lại rất ít mẫu đối với target. Khi deep learning được đánh giá cao trở lại, người thấy rằng pre-training chỉ còn cần thiết cho các tập dữ liệu nhỏ.
Tuy nhiên, có một dạng đặc biệt của deep feedforward network mà dễ huấn luyện hơn và tổng quát hóa tốt hơn nhiều so với những mạng sử dụng full connectivity giữa các lớp kế nhau. Đây chính là convolutional neural network (ConvNet.) Nó đã có được những thành công thực tế trong giai đoạn mà neural network không còn sức hút và gần đây đã được sử dụng rộng rãi trong cộng đồng thị giác máy tính.
Convolution neural network
ConvNet được thiết kế để xử lý dữ liệu nhiều mảng, ví dụ ảnh màu chứa 3 mảng 2D ứng với 3 kênh màu. Rất nhiều dữ liệu ở dạng nhiều mảng: 1D đối với tín hiệu và ngôn ngữ, 2D cho ảnh và spectrogram của âm thanh, 3D với video và ảnh đa phổ. Có 4 ý tưởng nền tảng đằng sau ConvNet liên quan đến tính chất của tín hiệu tự nhiên: liên kết cục bộ, weight chung, pooling (kết hợp) và sử dụng nhiều lớp.
Kiến trúc của một ConvNet thông thường bao gồm nhiều tầng. Những tầng đầu tiên chứa hai loại lớp: convolutional và pooling. Các unit trong một lớp convolutinal được sắp xếp theo các feature map, trong đó mỗi unit được nối với các patch cục bộ trong các feature map của lớp trước đó thông qua một tập các weight. Kết quả của phép tổng có trọng số này sẽ đi qua một hàm không tuyến tính như hàm ReLU. Tất cả các unit trong cùng một feature map có cùng tập weight. Các feature map khác nhau trong cùng một lớp sử dụng các tập weight khác nhau. Có hai lí do cho việc sử dụng kiến trúc này. Thứ nhất, với dữ liệu mảng như ảnh, các giá trị nằm gần nhau có tương quan mạnh với nhau, tạo thành những cấu trúc cục bộ tách biệt có thể dễ dàng được phát hiện. Thứ hai, các giá trị thống kê cục bộ của ảnh hay các dạng tín hiệu khác bất biến theo các vị trí khác nhau. Nói một cách khác, nếu một cấu trúc xuất hiện ở một vị trí nào đó trong ảnh, có cũng có thể xuất hiện ở vị trí bất kì nào khác, từ đó hình thành nên ý tưởng những unit ở các vị trí khác nhau có cùng tập weight và phát hiện cùng cấu trúc tại các vị trí khác nhau của mảng. Về mặt toán học, phép lọc để tạo ra feature map là phép chập rời rạc, điều này giải thích tên của convolutional neural network.
Trong khi chức năng của lớp convolutional là phát hiện sự trùng hợp cục bộ của thuộc tính từ lớp trước đó, chức năng của lớp pooling là kết hợp những thuộc tính tương tự nhau thành một. Do vị trí tương đối của các thuộc tính tạo nên một cấu trúc (motif) có thể thay đổi chút ít, việc phát hiện cấu trúc một cách hiệu quả có thể được thực hiện thông qua việc lấy mẫu xuống (coarse graining) mỗi thuộc tính. Một pooling unit thông thường tính giá trị lớn nhất của một patch các unit trong một feature map (hay một vài feature map.) Những pooling unit kế nhau ứng với các đầu vào từ các patch cách nhau hơn một hàng hay cột, do đó làm giảm kích thước của sự biểu diễn (ví dụ, feature map) và tạo ra sự bất biến đối với những dịch chuyển hay sái dạng nhỏ. Hai hoặc ba tầng convolutional, không tuyến tính và pooling được xếp kế tiếp nhau, theo sau bởi một số lượng nhiều hơn nữa các lớp convolutional hay fully-connected. Lan truyền ngược gradient trong ConvNet cũng đơn giản như trong deep network thông thường, cho phép tất cả các weight được huấn luyện.
Deep neural network khai thác tính chất có trong nhiều tín hiệu tự nhiên – tính chất phân tầng – trong đó các thuộc tính ở lớp cao hơn thu được bằng cách kết hợp các thuộc tính ở lớp thấp hơn. Đối với ảnh, sự kết hợp cục bộ các cạnh tạo nên motif, nhiều motif kết hợp tạo nên bộ phận (part), rồi bộ phận tạo nên đồ vật (object.) Những cấu trúc phân tầng tương tự cũng tồn tại trong tiếng nói và văn bản, đi từ âm thanh (sound) đến phone (âm, không phụ thuộc ngôn ngữ), phoneme (âm, phụ thuộc ngôn ngữ), syllable, từ (word) và câu (sentence.) Pooling cho phép biểu diễn với rất ít thay đổi khi mà các thành phần trong lớp trước đó thay đổi vị trí hay vẻ bề ngoài.
Các lớp convolutional và pooling trong ConvNet được lấy cảm hứng trực tiếp từ các khái niệm kinh điển về simple cell và complex cell trong khoa học thần kinh thị giác, và cấu truc tổng thể của ConvNet gợi nhớ đến cấu trúc phân tầng LGN – V1 – V2 – V4 – IT trong ventral pathway của visual cortex. Khi mô hình ConvNet và những con khỉ cùng được xem một hình, các đáp ứng từ những unit của những lớp cao trong ConvNet giải thích được một nửa các variance của những tập ngẫu nhiên gồm 160 neuron trong inferotemporal cortex của khỉ. ConvNet có nguồn gốc từ neocognition – một kiến trúc tương tự nhưng không dùng một giải thuật supervised-learning kiểu như backpropagation. ConvNet 1D sơ khai được gọi là time-delay neural net được dùng cho việc nhận dạng phoneme và những từ đơn giản.
Có nhiều ứng dụng của convolutional network từ những năm đầu 1990, bắt đầu với time-delay neural network cho nhận dạng tiếng nói và đọc tài liệu. Hệ thống đọc tài liệu dùng ConvNet huấn luyện đồng thời với một mô hình xác suất thể hiện những ràng buộc về ngôn ngữ. Vào cuối những năm 1990 hệ thống này đọc hơn 10% tổng số cheque ở Mỹ. Một số hệ thống nhận dạng kí tự quang học (OCR) và nhận dạng chữ viết tay dựa trên ConvNet được triển khai sau đó bởi Microsoft. ConvNet còn được thử nghiệm vào đầu những năm 1990 cho việc phát hiện đối tượng trong ảnh tự nhiên, bao gồm khuôn mặt và tay, và cho nhận dạng khuôn mặt.
Cảm nhận ảnh (image understanding) với deep convolutional network
Từ đầu những năm 2000, ConvNet có những thành công nổi bật trong phát hiện, phân vùng và nhận dạng đối tượng và vùng trong ảnh. Đây là những bài toán mà dữ liệu có đánh nhãn tương đối phong phú, như nhận dạng biển báo giao thông, phân vùng ảnh sinh học - đặc biệt cho connectomics -, phát hiện khuôn mặt, văn bản, người đi bộ và bộ phận cơ thể người trong ảnh tự nhiên. Một thành công lớn gần đây của ConvNet là nhận dạng khuôn mặt.
Đặc biệt, ảnh có thể được đánh nhãn cho từng pixel hứa hẹn những ứng dụng cho công nghệ như robot tự hành và xe hơi tự lái. Những công ty như Mobileye và NVIDIA đang sử dụng các phương pháp dựa trên ConvNet cho các hệ thống thị giác trên xe hơi sắp đến. Những ứng dụng quan trọng khác liên quan đến hiểu ngôn ngữ tự nhiên và nhận dạng tiếng nói.
Mặc dù có những thành công như vậy, ConvNet đã bị bỏ rơi trong cộng đồng machine learning và thị giác máy tính mãi cho tới khi có cuộc thi ImageNet năm 2012. Khi deep convolutional network áp dụng cho tập dữ liệu gồm khoảng một triệu ảnh thuộc 1000 nhóm khác nhau, nó đã đạt được kết quả ấn tượng, gần như làm giảm một nửa tỉ lệ sai số so với những phương pháp cạnh tranh với nó. Thành công này đến từ việc sử dụng hiệu quả GPU, ReLU, phương pháp regularization mới mang tên dropout, và kĩ thuật tạo ra nhiều mẫu huấn luyện bằng cách làm biến dạng những mẫu có sẵn. Thành công này đã mang đến một cuộc cách mạng trong lĩnh vực thị giác máy tính; hiện nay ConvNet là phương pháp thống trị trong hầu hết tất cả các vấn đề về nhận dạng và phát hiện và tiệm cận với khả năng của con người trong một số công việc. Một thành công lớn gần đây nữa là kết hợp ConvNet với recurrent net để sinh ra chú thích cho ảnh.
Những kiến trúc ConvNet gần đây có từ 10 đến 20 lớp ReLU, hàng trăm triệu weight, và hàng tỉ kết nối giữa các unit. Trong khi, chỉ hai năm trước đây, việc huấn luyện những mạng lớn như vậy cần đến hàng tuần thì hiện nay những tiến bộ liên quan đến phần cứng, phần mềm và song song hóa giải thuật đã giảm thời gian huấn luyện xuống còn vài giờ.
Chất lượng của các hệ thống thị giác dựa trên ConvNet đã khiến hầu hết các công ty lớn như Google, Facebook, Microsoft, IBM, Yahoo!, Twitter và Adobe, cũng như một số lượng lớn các start-up tiến hành các dự án nghiên cứu và phát triển và triển khai các sản phẩm và dịch vụ cảm nhận hình ảnh dựa trên ConvNet.
ConvNet có thể được thực hiện dễ dàng và hiệu quả trên phần cứng, chip hoặc FPGA. Những công ty như NVIDIA, Mobileye, Intel, Qualcomm và Samsung đang phát triển chip ConvNet để thực hiện các ứng dụng hình ảnh thời gian thực trên điện thoại, máy ảnh, robot và xe hơi tự lái.
Distributed representation và xử lý ngôn ngữ
Lý thuyết về deep learning cho thấy deep net có hai ưu điểm đặc biệt to lớn so với các giải thuật huấn luyện cổ điển không sử dụng distributed representation. Cả hai ưu điểm này đều xuất phát từ khả năng tổng hợp và phụ thuộc vào cơ chế sinh ra dữ liệu dựa trên những thành tố cơ bản thích hợp. Thứ nhất, huấn luyện distributed representation cho phép sinh ra những tổ hợp mới từ những giá trị thuộc tính đã được học, tổ hợp mới này khác với những gì mà hệ thống đã gặp trong quá trình huấn luyện (ví dụ, với n thuộc tính nhị phân ta có thể có 2n tổ hợp.) Thứ hai, tổng hợp các lớp biểu diễn trong một deep net mang lại những tiềm năng to lớn khác (dựa theo chiều sâu của mạng.)
Những lớp ẩn của một mạng nhiều lớp được học để biểu diễn dữ liệu đầu vào theo cách làm cho việc dự đoán kết quả đầu ra trở nên dễ dàng nhất. Ví dụ, huấn luyện một neural network nhiều lớp để dự đoán từ tiếp theo trong một chuỗi dựa trên ngữ cảnh của những từ đi trước. Mỗi từ được đưa vào network dưới dạng một vector one-of-N, nghĩa là chỉ có một thành phần mang giá trị 1, còn lại bằng 0. Ở lớp thứ nhất, mỗi từ tạo ra các một kiểu kích thích khác nhau (pattern of activations) hay word vector. Trong một mô hình ngôn ngữ, các lớp khác của mạng sẽ học để biến word vector đầu vào thành word vector đầu ra cho từ được dự đoán tiếp theo, cụ thể word vector này được dùng để tính xác suất xuất hiện cho mỗi từ có trong bộ từ vựng. Network học các word vector chứa nhiều thành phần tích cực, mỗi thành phần này có thể xem như là một thuộc tính của từ đó, như đã được minh họa trong bối cảnh huấn luyện distributed representation cho symbol. Những thuộc tính về mặt ngữ nghĩa này không xuất hiện một cách tường minh ở đầu vào. Nó được khám phá nhờ quá trình học nhằm trích ra những mối quan hệ có cấu trúc giữa symbol vào và symbol ra dưới dạng những micro-rule. Huấn luyện các word vector cũng cho thấy rất hiệu quả khi mà chuỗi từ xuất phát từ một tập văn bản lớn và những micro-rule riêng lẻ không đủ tin cậy. Khi được huấn luyện để dự đoán từ tiếp theo trong một mẩu tin, ví dụ, các word vector đối với Tuesday và Wednesday rất giống nhau, tương tự cho các word vector đối với Sweden và Norway. Cách biểu diễn như vậy gọi là distributed representation bởi vì những thành phần (thuộc tính) của chúng không loại trừ nhau và những biểu diễn khác nhau ứng với những khác biệt có trong dữ liệu được quan sát. Những word vector này bao gồm các thuộc tính được học chứ không phải được xác định trước bởi chuyên gia: chúng hoàn toàn được khám phá một cách tự động bởi neural network. Hiện nay, cách biểu diễn vector của các từ được học từ văn bản được sử dụng rộng rãi trong các ứng dụng về xử lý ngôn ngữ tự nhiên.
Vấn đề biểu diễn chiếm vị trí trung tâm trong cuộc tranh luận về mô hình logic-inspired và neural-network-inspired đối với việc nhận thức. Theo mô hình logic-inspired, một symbol có đặc điểm duy nhất là hoặc là giống hoặc là không giống với symbol khác. Nó không có cấu trúc bên trong liên quan đến cách sử dụng; và để lập luận với symbol, chúng cần được mô tả bằng các biến theo các luật suy luận được lựa chọn một cách tỉ mỉ. Ngược lại, neural network chỉ dùng các activity vector lớn, các ma trận weight lớn và hàm scalar không tuyến tính để thực hiện suy luận “trực giác” nhanh, đó cũng là nền tảng của cách lập luận thông thường mà con người sử dụng hết sức linh hoạt và nhẹ nhàng.
Trước khi xuất hiện mô hình ngôn ngữ dạng neural, phương pháp truyền thống của mô hình ngôn ngữ thống kê không khai thác distributed representation: nó chỉ dựa trên việc đếm tần suất xuất hiện của các chuỗi symbol ngắn có chiều dài đến N (gọi là N-gram.) Số lượng của N-gram có thể có là VN, với V là kích thước của tập từ vựng (vocabulary), do đó khi xét một chiều dài có hơn một vài từ sẽ cần tập huấn luyện rất lớn. N-gram xem mỗi từ như một đơn vị cơ bản riêng lẻ, và do đó nó không thể tổng quát hóa giữa các chuỗi từ liên hệ với nhau về mặt ngữ nghĩa, trong khi đó mô hình ngôn ngữ kiểu neural lại có thể bởi vì chúng liên kết mỗi từ với một vector gồm các thuộc tính có giá trị số thực, và các từ gần nhau về mặt ngữ nghĩa sẽ trở nên gần nhau trong không gian vector đó.
Recurrent neural network
Khi backpropagation lần đầu tiên được giới thiệu, cách dùng thú vị nhất của nó liên quan đến việc huấn luyện recurrent neural network (RNN). Với những bài toán liên quan đến đầu vào dạng chuỗi, như tiếng nói hay ngôn ngữ, RNN thường được ưu tiên lựa chọn. RNN xử lý chuỗi đầu vào theo cách mỗi thành phần một thời điểm, lưu trữ trong các unit ẩn một vector trạng thái chứa thông tin về các thành phần đã biết của chuỗi. Khi chúng ta xem đầu ra của các unit ẩn tại các thời điểm rời rạc khác nhau như là đầu ra của các neuron khác nhau trong một deep multilayer network, ta có thể thấy dễ dàng làm thế nào để áp dụng backpropagation cho việc huấn luyện RNN.
RNN là một hệ thống dynamic rất hiệu quả, nhưng huấn luyện nó có nhiều khó khăn do, khi lan truyền ngược, gradient trở nên lớn hơn hoặc bé hơn tại mỗi bước thời gian, do đó nếu qua nhiều bước nó có thể rất lớn hoặc bằng không.
Nhờ vào những tiến bộ về mặt kiến trúc và các phương pháp huấn luyện, RNN tỏ ra rất hiệu quả cho việc dự đoán kí tự tiếp theo trong văn bản hay từ tiếp theo trong một chuỗi, nhưng nó cũng có thể dùng cho các bài toán phức tạp hơn. Ví dụ, sau khi đọc một câu tiếng Anh mỗi từ tại một thời điểm, mạng encoder tiếng Anh có thể được huấn luyện sao cho vector trạng thái cuối cùng của các unit ẩn thể hiện tốt ý nghĩa của câu đó. Vector này có thể được dùng như là trạng thái ẩn khởi động cho một mạng decoder tiếng Pháp được huấn luyện đồng thời, bộ decoder tiếng Pháp này sẽ cho ra một phân bố xác suất cho từ đầu tiên trong bản dịch tiếng Pháp. Nếu một từ nào đó được chọn cho từ đầu tiên và đưa vào mạng decoder, mạng này sẽ đưa ra một phân bố xác suất cho từ thứ hai và tiếp tục như vậy cho đến khi kết thúc. Quá trình này sẽ cho ra một chuỗi các từ tiếng Pháp tùy theo phân bố xác suất phụ thuộc vào câu tiếng Anh. Phương pháp dịch máy tương đối đơn giản này nhanh chóng cạnh tranh được với các giải thuật tốt nhất, và từ đó đặt ra những nghi ngờ lớn: để hiểu một câu liệu có cần những biểu diễn symbolic được thực hiện bằng những luật suy luận. Nó thích hợp hơn với cách mà những suy luận hằng ngày sử dụng nhiều tình huống tương đồng để đưa ra kết luận.
Thay vì dịch nghĩa của một câu tiếng Pháp sang một câu tiếng Anh, ta có thể huấn luyện để dịch ý nghĩa của một bức ảnh sang một câu tiếng Anh. Bộ encoder ở đây là một deep ConvNet chuyển các pixel thành một activity vector ở lớp ẩn cuối cùng. Bộ decoder là một RNN tương tự như cách đã dùng cho dịch máy và mô hình ngôn ngữ dạng neural. Gần đây, những hệ thống này đã thu hút sự quan tâm lớn.
RNN, một khi biểu diễn theo thời gian, có thể xem như một deep feedforward network rất lớn, trong đó tất cả các lớp đều có cùng weight. Mặc dù mục đích chính của nó là học những mối liên hệ lâu dài, những kết quả lí thuyết và thực nghiệm cho thấy rất khó để học cho việc lưu thông tin rất dài.
Để cải thiện điều này, một ý tưởng là tăng cường cho network một bộ nhớ cụ thể. Đề xuất đầu tiên theo hướng này là các mạng long short-term memory (LSTM) sử dụng các unit ẩn đặc biệt mà đặc tính của nó là nhớ đầu vào trong một thời gian dài. Một unit đặc biệt gọi là ô nhớ hoạt động như một bộ tích lũy hay gated leaky neuron: nó có một liên kết đến chính nó ở thời điểm tiếp theo với weight bằng một, do đó nó chép lại trạng thái giá trị thực của chính nó và cộng dồn với tín hiệu bên ngoài, nhưng sự tự liên kết này đi qua một cổng nhân cùng với một unit khác, unit này được học để quyết định khi nào thì xóa nội dung của bộ nhớ.
Mạng LSTM đã chứng tỏ hiệu quả hơn RNN truyền thống, đặc biệt khi nó có nhiều lớp cho mỗi bước thời gian, cho phép xây dựng một hệ thống nhận dạng tiếng nói hoàn chỉnh đi từ tín hiệu âm thanh đến chuỗi kí tự được dịch. Mạng LSTM hay các dạng liên quan của gated unit hiện đang dùng cho các mạng encoder và decoder, những mạng này cho kết quả rất tốt đối với dịch máy.
Năm vừa qua, nhiều tác giả đã có nhiều đề xuất khác nhau để tăng cường cho RNN một khối bộ nhớ. Trong đó có đề xuất dùng Neural Turing Machine – network sẽ được tăng cường một bộ nhớ dạng “tape-like” mà RNN có thể chọn để đọc ra hay ghi vào –, và memory network trong đó một network thông thường được tăng cường một dạng bộ nhớ kết hợp. Memory network đã cho thấy những kết quả ấn tượng đối với bài toán hỏi-trả lời chuẩn. Bộ nhớ dùng để ghi nhớ câu chuyện mà network sẽ được hỏi và trả lời sau đó.
Bên cạnh việc ghi nhớ đơn giản, neural Turing machine và memory network còn đang được dùng cho các bài toán mà thông thường yêu cầu lập luận và xử lý symbol. Neural Turing machine có thể được dạy các giải thuật. Bên cạnh những thứ khác, nó có thể cho ra một danh sách được chọn lọc các symbol khi đầu vào chứa một chuỗi chưa được sắp xếp, mỗi symbol đi kèm với một giá trị thực cho biết mức độ ưu tiên của nó trong danh sách. Memory network có thể được huấn luyện để bám theo trạng thái của bối cảnh giống như trò chơi đố chữ và sau khi đọc một câu chuyện, nó có thể trả lời các câu hỏi cần sự suy luận phức tạp. Ví dụ, khi được cho xem một phiên bản chỉ gồm 15 câu của The Lord of the Rings, network đã trả lời đúng các câu hỏi như “where is Frodo now?”
Tương lai của deep learning
Unsupervised learning có vai trò xúc tác cho việc khôi phục lại mối quan tâm đối với deep learning, nhưng sau đó đã bị che khuất bởi thành công của supervised learning. Mặc dù chúng ta không tập trung vào unsupervised learning trong bài này, chúng tôi nghĩ rằng unsupervised learning sẽ đóng vai trò quan trọng hơn nhiều trong tương lai. Con người và động vật học theo cách của unsupervised learning: chúng ta khám phá ra cấu trúc của thế giới bằng cách quan sát nó, chứ không phải nhờ được chỉ tên của từng đối tượng.
Thị giác con người là một quá trình tích cực mà lần lượt lấy mẫu hình ảnh một cách thông minh, theo yêu cầu bằng cách sử dụng fovea có kích thước nhỏ và độ phân giải cao, và vùng xung quanh lớn và có độ phân giải thấp. Chúng tôi nghĩ rằng phần lớn tiến bộ trong tương lai của thị giác nhân tạo sẽ đến từ các hệ thống được huấn luyện từ đầu đến cuối và kết hợp ConvNet với RNN và sử dụng reinforcement learning để quyết định nhìn vào đâu. Các hệ thống kết hợp deep learning và reinforcement learning mới ở giai đoạn bắt đầu nhưng đã vượt trội các hệ thống thị giác thụ động đối với bài toán phân loại và cho kết quả ấn tượng khi học để chơi nhiều trò chơi video khác nhau.
Hiểu ngôn ngữ tự nhiên là lĩnh vực khác mà deep learning được kì vọng sẽ có ảnh hưởng lớn trong thời gian ngắn sắp đến. Chúng tôi nghĩ rằng các hệ thống dùng RNN để hiểu câu hay cả văn bản sẽ có chất lượng tốt hơn nhiều khi chúng học các chiến lược để tập trung một cách có chọn lọc vào một phần nào đó tại mỗi thời điểm.
Cuối cùng, những tiến bộ lớn trong lĩnh vực trí tuệ nhân tạo sẽ đến từ các hệ thống kết hợp việc học cách biểu diễn (representation learning) và suy luận phức tạp (complex reasoning). Mặc dù deep learning và suy luận đơn giản từ lâu đã được dùng cho nhận dạng tiếng nói và chữ viết tay, chúng ta cần phát triển những mô hình mới để thay thế cách xử lý symbolic expression dựa trên luật bằng các phép toán trên vector có chiều dài lớn.
Yann LeCun, Yoshua Bengio & Geoffrey Hinton
Nature 521, 436–444 (28 May 2015)
(http://www.nature.com/nature/journal/v521/n7553/full/nature14539.html)
(Hình ảnh minh họa trong bài báo có thể xem ở link trên.)