Truyền ngược

Trong tiếng Anh, Truyền ngược là Backpropagation, là một từ viết tắt cho "backward propagation of errors" tức là "truyền ngược của sai số", là một phương pháp phổ biến để huấn luyện các mạng thần kinh nhân tạo được sử dụng kết hợp với một phương pháp tối ưu hóa như gradient descent. Phương pháp này tính toán gradient của hàm tổn thất với tất cả các trọng số có liên quan trong mạng nơ ron đó. Gradient này được đưa vào phương pháp tối ưu hóa, sử dụng nó để cập nhật các trọng số, để cực tiểu hóa hàm tổn thất.
Truyền ngược yêu cầu một đầu ra mong muốn, đã biết cho mỗi giá trị đầu vào để tính toán gradient hàm tổn thất. Do đó, nó thường được xem là một phương pháp học có giám sát, mặc dù nó cũng được sử dụng trong một số mạng không có giám sát như autoencoders. Nó là một tổng quát hóa của quy tắc delta cho các mạng nuôi tiến đa tầng, có thể thực hiện bằng cách sử dụng quy tắc dây chuyền để tính toán lặp đi lặp lại các gradient cho mỗi lớp. Truyền ngược yêu cầu các hàm kích hoạt được sử dụng bởi cácnơ-ron nhân tạo (hay "nút") khả vi.

Động lực

Mục tiêu của bất kỳ thuật toán học có giám sát nào cũng là phải tìm ra được một hàm ánh xạ tốt nhất một tập hợp các yếu tố đầu vào tới đầu ra chính xác của nó. Một ví dụ đó là một tác vụ phân loại đơn giản, trong đó đầu vào là một hình ảnh của một con vật, và đầu ra chính xác sẽ là tên của con vật đo.
Mục tiêu và động lực cho sự phát triển của các thuật toán truyền ngược là tìm ra được một cách để huấn luyện một mạng thần kinh nhiều lớp để nó có thể học được đại diện nội bộ thích hợp, cho phép nó học được bất kỳ ánh xạ nào của đầu vào đến đầu ra.

Tóm lược

Thuật toán học truyền ngược có thể được chia thành hai giai đoạn: lan truyền, cập nhật trọng số.

Thuật toán

Sau đây là một thuật toán gradient descent ngẫu nhiên dành cho việc huấn luyện một mạng ba lớp (chỉ có một lớp ẩn):
  khởi tạo các trọng số của mạng (thường là các giá trị ngẫu nhiên nhỏ)
  do
     forEach ví dụ huấn luyện được đặt tên là ex
        dự đoán = neural-net-output(mạng, ex)  // forward pass
        actual = teacher-output(ex)
        tính sai số (dự đoán - thực tế) tại các đơn vị đầu ra
        tính  cho tất cả các trọng số từ lớp ẩn cho tới lớp đầu ra  // backward pass
        tính  cho tất cả các trọng số từ lớp đầu vào cho tới lớp ẩn   // backward pass continued
        cập nhật tất cả các trọng số của mạng // lớp đầu vào không được chỉnh sửa bởi ước lượng sai số
  until tất cả các ví dụ được phân loại chính xác hoặc một tiêu chí dừng được thỏa mãn
  return the network
Các dòng có gắn nhãn "backward pass" có thể được thực hiện bằng cách sử dụng thuật toán truyền ngược, thuật toán này sẽ tính toán gradient của sai số của mạng đó liên quan đến các trọng số có thể chỉnh sửa của mạng đó. Thuật ngữ "truyền ngược" thường được sử dụng theo nghĩa tổng quát hơn, đó là để nói đến toàn bộ thủ tục bao gồm cả việc tính toán gradient và sử dụng của nó trong gradient descent ngẫu nhiên, nhưng truyền ngược thích hợp có thể được sử dụng với bất kỳ bộ tối ưu hóa dựa trên gradient nào, chẳng hạn như L-BFGS hoặc Newton cắt ngắn.
Các mạng truyền ngược cần các perceptron nhiều lớp (thường là với một đầu vào, nhiều lớp ẩn, và một lớp ra). Để cho lớp ẩn phục vụ cho bất kỳ hàm hữu ích nào, nhiều mạng đa lớp phải có có các hàm kích hoạt phi tuyến cho các lớp trùng nhau: một mạng đa lớp chỉ sử dụng các hàm kích hoạt tuyến tính tương đương với một số mạng tuyến tính, một lớp. Các hàm kích hoạt phi tuyến được sử dụng phổ biến bao gồm hàm rectifier, Hàm Lôgit, hàm softmax (hàm mũ chuẩn hóa), và hàm Gauss.
Thuật toán truyền ngược cho việc tính toán một gradient đã được tái phát hiện một số lần, và là một trường hợp đặc biệt của một kỹ thuật tổng quát được gọi là phép lấy vi phân tự động ở chế độ tích lũy ngược.
Nó cũng liên quan chặt chẽ đến thuật toán Gauss-Newton, và cũng là một phần của nghiên cứu liên tục trong truyền ngược thần kinh.

Giải tích để hiểu về gradient descent

Trực giác cơ bản đằng sau gradient descent có thể được minh họa bằng một kịch bản giả định. Một người đang bị mắc kẹt trên núi và đang cố gắng để đi xuống (nghĩa là cố gắng để tìm điểm cực tiểu). Trời đang sương mù nặng cho nên tầm nhìn bị hạn chế rất nhiều. Vì vậy, đường xuống núi không thể nhìn thấy được, vì vậy anh ta phải sử dụng thông tin cục bộ (địa phương) để tìm ra điểm cực tiểu. Anh ta có thể sử dụng phương pháp gradient descent, bao gồm việc nhìn vào độ dốc của ngọn đồi tại vị trí hiện tại của mình, sau đó di chuyển theo hướng dốc nhất đi xuống(cụ thể là xuống dốc). Nếu anh ta đã cố gắng để tìm thấy đỉnh núi (tức là điểm cực đại), thì anh ta sẽ tiếp tục đi theo hướng dốc nhất đi lên (tức là lên dốc). Sử dụng phương pháp này, anh ta sẽ dần dần tìm thấy đường đi xuống núi. Tuy nhiên, giả định cũng đưa ra rằng độ dốc của ngọn đồi không phải là rõ ràng ngay lập tức với các quan sát đơn giản, mà thay vào đó nó đòi hỏi một dụng cụ tinh vi để đo lường, mà người đó vô tình có được tại thời điểm đó. Phải mất khá nhiều thời gian để đo độ dốc của ngọn đồi với dụng cụ này, như vậy anh ta nên giảm thiểu việc sử dụng dụng cụ này nếu muốn xuống tới chân núi trước khi hoàng hôn ập tới. Khó khăn sau đó là lựa chọn tần suất đo độ dốc của ngọn đồi để không phải đi ra khỏi lộ trình cần phải đi.
Trong phép giải tích này, người tham gia đại diện cho thuật toán truyền ngược và đường đi dẫn xuống núi đại diện cho chuỗi cài đặt tham số mà thuật toán sẽ khám phá. Độ dốc của ngọn đồi tượng trưng cho độ dốc của bề mặt sai số vào thời điểm đó. Dụng cụ dùng để đo độ dốc chính là đạo hàm (độ dốc của bề mặt sai số có thể được tính bằng cách lấy đạo hàm của hàm sai số bình phương tại thời điểm đó). Hướng mà anh ta chọn để đi di chuyển gắn với gradient của bề mặt sai số vào thời điểm đó. Lượng thời gian mà anh ta di chuyển trước khi thực hiện một đo lường khác chính là tốc độ học của thuật toán. Xem phần giới hạn để xem thảo luận về những hạn chế của thuật toán "leo núi" loại này.

Các chế độ học

Có hai chế độ học để lựa chọn: một loạt và ngẫu nhiên. Trong chế độ học ngẫu nhiên, mỗi một lan truyền được theo sau ngay bởi một cập nhật trọng số. Trong học một loạt, nhiều lan truyền xảy ra trước khi cập nhật các trọng số, các sai số tích lũy trên các mẫu nằm trong một gói. Học Ngẫu nhiên đưa vào các "nhiễu" vào quá trình gradient descent, sử dụng gradient địa phương tính từ một điểm dữ liệu. Điều này sẽ giúp giảm khả năng bị mắc kẹt trong một cực tiểu cục bộ cho mạng lưới. Tuy nhiên, học một loạt thường đạt được độ dốc nhanh hơn, ổn định hơn với một cực tiểu địa phương, vì mỗi cập nhật được thực hiện theo hướng sai số trung bình của các mẫu một loạt. Trong các ứng dụng hiện đại, một lựa chọn thỏa hiệp phổ biến là sử dụng các "mini-batch", nghĩa là học một loạt, nhưng với một gói có kích thước nhỏ và mẫu được lựa chọn ngẫu nhiên.

Bộ sưu tập dữ liệu huấn luyện

Học trực tuyến được sử dụng cho các môi trường động, cung cấp một dòng liên tục các mẫu dữ liệu huấn luyện mới. Học ngoại tuyến tận dụng tốt một tập huấn luyện các mô hình tĩnh.

Lịch sử

Theo các nguồn khác nhau, vấn đề cơ bản của truyền ngược liên tục được bắt nguồn từ trong bối cảnh của lý thuyết điều khiển bởi Henry J. Kelley trong năm 1960 và bởi Arthur E. Bryson vào năm 1961, sử dụng các nguyên tắc của quy hoạch động. Năm 1962, Stuart Dreyfus xuất bản một dẫn xuất đơn giản chỉ dựa trên quy tắc dây chuyền. Vapnik trích dẫn tham khảo trong quyể sách của ông về Máy véc tơ hỗ trợ. Arthur E. Bryson và Yu-Chi Ho mô tả nó như là một phương pháp tối ưu hóa nhiều-giai đoạn vào năm 1969.
Năm 1970,Seppo Linnainmaa cuối cùng đã xuất bản phương pháp tổng quát để tính vi phân tự động (AD) rời rạc kết nối các mạng của hàm khả vi lồng nhau. Điều này tương ứng với phiên bản hiện đại của truyền ngược có hiệu quả ngay cả khi các mạng không nhiều.
Năm 1973, Stuart Dreyfus sử dụng truyền ngược để tương thích với các tham số của các bộ điều khiển tỉ lệ với các gradient sai số. Năm 1974, Paul Werbos đề cập đến khả năng áp dụng nguyên tắc này cho các mạng nơ-ron nhân tạo, và trong năm 1982, ông đã áp dụng phương pháp AD của Linnainmaa cho các mạng nơ-ron theo cách mà chúng ta sử dụng rộng rãi ngày nay
Năm 1986,David E. Rumelhart, Geoffrey E. Hinton và Ronald J. Williams cho thấy thông qua các thí nghiệm máy tính rằng phương pháp này có thể tạo ra các đại diện bên trong hữu ích của dữ liệu vào trong các lớp ẩn của mạng nơ-ron. Vào năm 1993, Eric A. Wan là người đầu tiên chiến thắng một cuộc thi nhận  dạng mẫu quốc tế thông qua phương pháp truyền ngược. Trong những năm 2000 nó không còn được ưa thích nữa nhưng đã được sử dụng trở lại trong những năm 2010, hiện tại có thể huấn luyện nhiều mạng lớn hơn nhiều bằng cách sử sức mạnh tính toán hiện đại khổng lồ như GPU. Ví dụ, vào năm 2013 những chương trình nhận dạng giọng nói tốt nhất có sử dụng các mạng nơ-ron được huấn luyện theo phương pháp truyền ngược này.