Động lực của học sâu, lịch sử và cảm hứng của nó

$$\gdef \sam #1 {\mathrm{softargmax}(#1)}$$ $$\gdef \vect #1 {\boldsymbol{#1}} $$ $$\gdef \matr #1 {\boldsymbol{#1}} $$ $$\gdef \E {\mathbb{E}} $$ $$\gdef \V {\mathbb{V}} $$ $$\gdef \R {\mathbb{R}} $$ $$\gdef \N {\mathbb{N}} $$ $$\gdef \relu #1 {\texttt{ReLU}(#1)} $$ $$\gdef \D {\,\mathrm{d}} $$ $$\gdef \deriv #1 #2 {\frac{\D #1}{\D #2}}$$ $$\gdef \pd #1 #2 {\frac{\partial #1}{\partial #2}}$$ $$\gdef \set #1 {\left\lbrace #1 \right\rbrace} $$
🎙️ Yann LeCun

Nội dung

  • Kiến thức cơ bản của học có giám sát (Supervised Learning), mạng thần kinh (Neural Nets) và học sâu (Deep Learning).
  • Lan truyền ngược và các thành phần kiến trúc của nó.
  • Mạng lưới thần kinh tích chập và các ứng dụng của nó.
  • Các kiến trúc học sâu.
  • Thủ thuật quy định hóa/ Thủ thuật tối ưu hóa/ Hiểu cách hoạt động của học sâu.
  • Mô hình dựa trên năng lượng.
  • Học giám sát và hơn thế nữa.

Cảm hứng của học sâu và lịch sử của nó

Ở cấp độ khái niệm, học sâu được truyền cảm hứng từ bộ não người, nhưng không phải tất cả các chi tiết của bộ não người điều có liên quan. Để so sánh, máy bay được lấy cảm hứng từ chim, về nguyên lý bay thì giống nhau, nhưng các chi tiết thì hoàn toàn khác nhau.

Lịch sử của học sâu được quay trở lại từ một lĩnh vực đã được đổi tên gọi là điều khiển học. Nó bắt đầu bởi McCulloch và Pitts vào những năm 1940. Họ đã đưa ra ý tưởng rằng các nơ-ron (thần kinh) những đơn vị ngưỡng có trạng thái bật và tắt. Bạn có thể xây dựng mạch Boolean bằng cách kết nối các nơ-ron với nhau và tiến hành suy luận logic với các nơ-ron đó. Bộ não người về cơ bản là một cổ máy suy luận logic bởi vì các tế bào thần kinh là một hệ nhị phân. Các tế bào thần kinh tính toán tổng trọng số của các đầu vào so sánh tổng trọng số đó với ngưỡng của nó. Nó sẽ bật nếu nó ở trên ngưỡng và tắt nếu ở dưới ngưỡng, đó là cái nhìn đơn giản về cách mạng lưới thần kinh hoạt động.

Năm 1947, Donald Hebb có ý tưởng rằng các tế bào thần kinh trong não hoạt động bằng cách điều chỉnh độ bền của các kết nối giữa các nơ-ron với nhau. Đây được gọi là siêu học (hyper learning), trong đó nếu hai tế bào thần kinh được kích hoạt cùng nhau, thì kết nối liên kết giữa chúng sẽ tăng lên; nếu chúng không được kích hoạt bằng nhau, thì kết nối liên kết giữa chúng sẽ giảm xuống.

Sau đó vào năm 1948, điều khiển học được Norbert Wiener đề xuất, ý tưởng rằng bằng cách có các hệ thống với cảm biến và cơ cấu chấp hành, bạn có một vòng phản hồi và một hệ thống tự điều chỉnh. Các quy luật của cơ chế phản hồi của ô tô đều xuất phát từ công việc này.

Năm 1957, Frank Rosenblatt đề xuất Perceptron, nó là một thuật toán phân lớp sửa đổi trọng số của các mạng nơ-ron rất đơn giản.

Nhìn chung, ý tưởng cố gắng tạo ra những cỗ máy trí tuệ bằng cách mô phỏng rất nhiều tế bào thần kinh ra đời vào những năm 1940, phát triển vào những năm 1950 và hoàn toàn chết vào cuối những năm 1960. Những lý do chính khiến lĩnh vực này chết dần vào năm 1960 là:

  • Các nhà nghiên cứu đã sử dụng các tế bào thần kinh có dạng nhị phân (binary). Tuy nhiên, cách để lan truyền ngược (backpropagation) hoạt động là sử dụng các hàm kích hoạt (activation functions) liên tục. Vào thời điểm đó, các nhà nghiên cứu không có ý tưởng sử dụng các tế bào thần kinh liên tục và họ cũng không nghĩ rằng họ có thể đào tạo với độ dốc (gradient) vì các tế bào thần kinh nhị phân không khác biệt.

  • Với các tế bào thần kinh liên tục, người ta sẽ phải nhân kích hoạt của một tế bào thần kinh với một trọng số để có được một phần đóng góp vào tổng trọng số. Tuy nhiên, trước năm 1980, phép nhân hai số, đặc biệt là các số thập phân, rất chậm. Điều này dẫn đến một động cơ khác để tránh sử dụng các tế bào thần kinh liên tục.

Học sâu lại thành công trở lại vào 1985 với sự xuất hiện của việc lan truyền ngược. Năm 1995, lĩnh vực này lại chết một lần nữa và cộng đồng máy học (Machine learning) từ bỏ ý tưởng về mạng lưới thần kinh. Năm 2010, mọi người bắt đầu sử dụng mạng nơ-ron trong nhận dạng giọng nói với sự cải thiện hiệu xuất rất lớn và sau đó nó được triển khai rộng rãi trong lĩnh vực thương mại. Năm 2013, thị giác máy tính bắt đầu chuyển sang mạng nơ-ron. Năm 2016, quá trình chuyển đổi tương tự cũng xảy ra trong xử lý ngôn ngữ tự nhiên. Chẳng bao lâu nữa, các cuộc cách mạng tương tự sẽ xảy ra trong lĩnh vực robot, điều khiển và nhiều lĩnh vực khác.

Học giám sát

90% các ứng dụng học sâu sử dụng phương pháp học giám sát. Học giám sát là một quá trình, trong đó các bạn thu thập một loạt các cặp đầu vào và đầu ra, và các đầu vào được đưa vào một máy để học các đầu ra chính xác. Khi các đầu ra chính xác, bạn không cần làm gì nữa. Nếu đầu ra sai, bạn chỉnh lại tham số của máy và sửa đầu ra theo hướng bạn muốn. Bí quyết ở đây là cách bạn tìm ra hướng, mức độ các bạn điều chỉnh tham số và điều này quay trở lại tính toán độ dốc (gradient) và lan truyền ngược.

Học giám sát bắt nguồn từ Perceptron và Adaline. Adaline dựa trên cùng một kiến trúc với các đầu vào có trọng số, khi nó ở trên ngưỡng, nó sẽ bật và dưới ngưỡng, nó sẽ đóng. Perceptron là một nơ-ron 02 lớp, lớp thứ 02 có thể huấn luyện được và lớp thứ 01 được cố định. Hầu hết thời gian, lớp đầu tiên được xác định ngẫu nhiên và đó là những gì họ gọi là các lớp liên kết (associative layers)

Lịch sử của nhận dạng mẫu (Pattern recognition) và giới thiệu về giảm dần độ dốc (Gradient Descent)

Những điều đã nói ở trên là cơ sở của khái niệm nhận dạng mẫu trước khi học sâu được phát triển. Mô hình của nhận dạng mẫu bao gồm bộ trích xuất đặc trưng và bộ phân loại có thể đào tạo được. Đầu vào đi vào trình trích xuất đặc trưng, trích xuất các đặc điểm hữu ích có liên quan của đầu vào, chẳng hạn như phát hiện mặt cho mục đích nhận dạng gương mặt. Sau đó, các véc-tơ dặc trưng được đưa đến bộ phân loại có thể đào tạo để tính toán tổng trọng số và so sánh nó với ngưỡng. Ở đây, một bộ phân loại có thể đào tạo được có thể là một Perceptron hoặc là một mạng lưới thần kinh. Vấn đề trích xuất đặc trưng nên được tạo ra bằng tay. Có nghĩa là “nhận dạng mẫu hoặc thị giác máy tính tập trung vào trình trích xuất đặc trưng xem xét đến cách thiết kế nó cho một vấn đề cụ thể, không dành nhiều cho bộ phân loại có thể đào tạo dược”.

Sau sự xuất hiện và phát triển của học sâu, quy trình 2 giai đoạn được chuyển sang trình tự của các mô-đun. Mỗi mô-đun có các tham số và phi tuyến tính có thể điều chỉnh. Sau đó, xếp chúng thành nhiều lớp. Đây là lý do tại sao nó được gọi là “học sâu”. Lý do tại sao sử dụng phi tuyến tính thay vì tuyến tính? Là hai lớp tuyến tính có thể là một lớp tuyến tính, vì thành phần của hai tuyến tính là tuyến tính.

Kiến trúc nhiều lớp đơn giản nhất với tham số và phi tuyến tính có thể được điều chỉnh là: Đầu vào được biểu dưới dạng véc-tơ như hình ảnh hay âm thanh. Đầu vào này được nhân với một ma trận trọng số có hệ số là một tham số có thể điều chỉnh được. Sau đó, mọi thành phần của véc-tơ kết quả được chuyển qua một hàm phi tuyến tính như ReLU. Lặp lại quá trình này, nó sẽ trở thành một mạng nơ-ron cơ bản. Lý do tại sao nó được gọi là mạng nơ-ron? Là vì kiến trúc này tính toán tổng trọng số của các thành phần đầu vào theo các hàng tương ứng của ma trận.

Quay lại quan điểm của học giám sát, chúng tôi so sánh kết quả đầu ra với đầu ra mục tiêu, sau đó tối ưu hóa hàm mục tiêu là mất mát/ tổn thất, có nghĩa là tính toán khoảng cách giữa kết quả đầu ra với đầu ra mục tiêu. Sau đó, tính trung bình hàm chi phí (cost function) này trên tập huấn luyện. Đây là mục đích mà chúng tôi muốn giảm thiểu. Nói cách khác, chúng tôi muốn tìm giá trị của các tham số tốt thiểu trung bình này.

Phương pháp tìm nó là tính toán độ dốc. Ví dụ, nếu chúng ta đang lạc vào một ngọn núi đầy sương mù và muốn đến một ngôi làng trong thung lũng. Một cách là quay đầu lại và xem con đường nào dốc nhất và đi xuống với từng bước nhỏ. Hướng đi là độ dốc âm. Với giả định rằng thung lũng là lồi, như thế chúng ta có thể đi đến thung lũng.

Cách hiệu qua hơn được gọi là SGD (Stochastic Gradient Descent - giảm dần độ dốc ngẫu nhiên). Vì chúng tôi muốn giảm thiểu tổn thất trung bình trên tập huấn luyện, chúng tôi lấy một mẫu hoặc một nhóm mẫu nhỏ và tính toán sai số, sau đó sử dụng phương pháp giảm dần độ dốc. Tiếp đến, chúng tôi lấy một mẫu mới và nhận một giá trị mới cho lỗi, sau đó nhận được một độ dốc là hướng khác bình thường. Hai lý do chính sử dụng SGD là nó giúp một mô hình hội tụ nhanh theo kinh nghiệm nếu tập huấn luyện rất lớn và nó cho phép tổng quát hóa tốt hơn, có nghĩa là có được hiệu suất tương tự trên các tập dữ liệu khác nhau.

Tính toán độ dốc bằng phương pháp lan truyền ngược

Tính toán độ dốc bằng phương pháp lan truyền ngược là một ứng dụng thực tế của quy tắc chuỗi. Phương trình lan truyền ngược cho các độ dốc đầu vào như sau:

\[\begin{aligned} \frac{\partial C}{\partial \boldsymbol{x}_{i - 1}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial \boldsymbol{x}_i}{\partial \boldsymbol{x}_{i - 1}} \\ \frac{\partial C}{\partial \boldsymbol{x}_{i - 1}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial f_i(\boldsymbol{x}_{i - 1}, \boldsymbol{w}_i)}{\partial \boldsymbol{x}_{i - 1}} \end{aligned}\]

Phương trình lan truyền ngược cho các trọng số độ dốc như sau:

\[\begin{aligned} \frac{\partial C}{\partial \boldsymbol{w}_{i}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial \boldsymbol{x}_i}{\partial \boldsymbol{w}_{i}} \\ \frac{\partial C}{\partial \boldsymbol{w}_{i}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial f_i(\boldsymbol{x}_{i - 1}, \boldsymbol{w}_i)}{\partial \boldsymbol{w}_{i}} \end{aligned}\]

Lưu ý rằng: “thay vì đầu vào vô hướng, chúng sẽ là véc-tơ đầu vào”. Tổng quan hơn là các đầu vào đa chiều. Sự lan truyền ngược cho phép bạn tính toán đạo hàm của sự khác biệt đầu ra bạn muốn và đầu ra bạn nhân được (là giá trị của hàm mục tiêu) đối với bất kỳ giá trị nào của bên trong mạng. Cuối cùng, lan truyền ngược là điều cần thiết vì nó áp dụng cho nhiều lớp.

Điều quan trọng là phải xem xét cách giải thích đầu vào. Ví dụ, một hình ảnh 256*256 sẽ yêu cầu một ma trận có giá trị 200,000. Đây sẽ là những ma trận khổng lồ mà các lớp mạng nơ-ron sẽ cần xử lý. Nó sẽ không thực tế nếu sử dụng những ma trận như vậy. Do đó, điều quan trọng là phải đưa ra giả thuyết về cấu trúc của ma trận.

Biểu diễn phân cấp của vỏ não thị giác

Các thí nghiệm của Fukushima đã cho chúng ta hiểu về cách bộ não của chúng ta diễn giải đầu vào cho mắt của chúng ta. Tóm lại, người ta phát hiện ra rằng các tế bào thần kinh phía trước võng mạc của chúng ta nén đầu vào (được gọi là bình thường hóa độ tương phản) và tín hiệu truyền từ mắt đến não của chúng ta. Sau đó, hình ảnh được xử lý theo từng giai đoạn và một số tế bào thần kinh nhất định được kích hoạt cho một số danh mục nhất định. Do đó, vỏ não thị giác thực hiện nhận dạng mẫu theo cách phân cấp.

Các thí nghiệm trong đó các nhà nghiên cứu chọc vào các điện cực trong các khu vực cụ thể của vỏ não thị giác, đặc biệt là khu vực V1, khiến các nhà nghiên cứu nhận ra rằng một số tế bào thần kinh nhất định phản ứng với các mô-típ xuất hiện trong một khu vực rất nhỏ trong trường thị giác và tương tự với các tế bào thần kinh lân cận và các khu vực lân cận trong trường thị giác . Ngoài ra, các tế bào thần kinh phản ứng với cùng một trường thị giác, phản ứng với các loại cạnh khác nhau một cách có tổ chức (ví dụ như các cạnh dọc hoặc ngang). Cũng cần lưu ý rằng cũng có ý kiến ​​cho rằng quá trình trực quan về cơ bản là một quá trình chuyển tiếp nguồn cấp dữ liệu. Do đó, bằng cách nào đó có thể thực hiện nhận dạng nhanh mà không cần một số kết nối lặp lại.


📝 Yunya Wang, SunJoo Park, Mark Estudillo, Justin Mae
Huynh Nguyen
27 Jan 2020