Đào tạo mạng lưới thần kinh
Bây giờ chúng ta sẽ học cách đào tạo một mạng nơ-ron. Chúng ta cũng sẽ tìm hiểu thuật toán lan truyền ngược và truyền ngược trong Python Deep Learning.
Chúng ta phải tìm các giá trị tối ưu của trọng số của mạng nơ-ron để có được đầu ra mong muốn. Để đào tạo mạng nơ-ron, chúng tôi sử dụng phương pháp giảm dần gradient lặp đi lặp lại. Chúng tôi bắt đầu ban đầu với việc khởi tạo ngẫu nhiên các trọng số. Sau khi khởi tạo ngẫu nhiên, chúng tôi đưa ra dự đoán trên một số tập hợp con của dữ liệu với quá trình truyền chuyển tiếp, tính hàm chi phí tương ứng C và cập nhật mỗi trọng số w một lượng tỷ lệ với dC / dw, tức là, đạo hàm của các hàm chi phí wrt the cân nặng. Hằng số tỷ lệ được gọi là tỷ lệ học tập.
Các gradient có thể được tính toán một cách hiệu quả bằng cách sử dụng thuật toán lan truyền ngược. Quan sát cơ bản của sự lan truyền ngược hoặc hỗ trợ lùi là do quy luật chuỗi phân biệt, gradient tại mỗi nơron trong mạng nơron có thể được tính toán bằng cách sử dụng gradient tại các nơron, nó có các cạnh đi ra. Do đó, chúng tôi tính toán gradient ngược lại, tức là, đầu tiên tính toán gradient của lớp đầu ra, sau đó là lớp ẩn trên cùng, tiếp theo là lớp ẩn trước, v.v., kết thúc ở lớp đầu vào.
Thuật toán lan truyền ngược được thực hiện hầu hết bằng cách sử dụng ý tưởng của một đồ thị tính toán, trong đó mỗi nơ-ron được mở rộng thành nhiều nút trong đồ thị tính toán và thực hiện một phép toán đơn giản như cộng, nhân. Đồ thị tính toán không có bất kỳ trọng số nào trên các cạnh; tất cả các trọng số được gán cho các nút, vì vậy các trọng số trở thành các nút của chính chúng. Thuật toán lan truyền ngược sau đó được chạy trên đồ thị tính toán. Khi tính toán hoàn tất, chỉ cần cập nhật các độ dốc của các nút trọng số. Phần còn lại của gradient có thể bị loại bỏ.
Kỹ thuật tối ưu hóa Gradient Descent
Một chức năng tối ưu hóa thường được sử dụng để điều chỉnh trọng số theo lỗi mà chúng gây ra được gọi là "gradient descent".
Gradient là một tên gọi khác của độ dốc và độ dốc, trên đồ thị xy, biểu thị cách hai biến số có liên quan với nhau: sự gia tăng trong quá trình chạy, sự thay đổi về khoảng cách so với sự thay đổi của thời gian, v.v. Trong trường hợp này, độ dốc là tỷ lệ giữa lỗi của mạng và một trọng số duy nhất; nghĩa là, sai số thay đổi như thế nào khi trọng lượng thay đổi.
Nói một cách chính xác hơn, chúng tôi muốn tìm trọng lượng nào tạo ra ít lỗi nhất. Chúng tôi muốn tìm trọng số thể hiện chính xác các tín hiệu có trong dữ liệu đầu vào và chuyển chúng sang một phân loại chính xác.
Khi một mạng nơ-ron học hỏi, nó từ từ điều chỉnh nhiều trọng số để chúng có thể ánh xạ tín hiệu thành ý nghĩa một cách chính xác. Tỷ lệ giữa Lỗi mạng và mỗi trọng số đó là một đạo hàm, dE / dw tính toán mức độ mà một thay đổi nhỏ trong trọng số gây ra một thay đổi nhỏ trong lỗi.
Mỗi trọng số chỉ là một yếu tố trong mạng lưới sâu bao gồm nhiều biến đổi; tín hiệu của trọng lượng truyền qua các lần kích hoạt và tính tổng qua một số lớp, vì vậy chúng tôi sử dụng quy tắc chuỗi của phép tính để hoạt động trở lại thông qua các kích hoạt và kết quả mạng.
Với hai biến, lỗi và trọng số, được điều chỉnh bởi một biến thứ ba, activation, qua đó trọng lượng được chuyển qua. Chúng tôi có thể tính toán cách thay đổi trọng lượng ảnh hưởng đến sự thay đổi trong lỗi bằng cách trước tiên tính toán cách một thay đổi trong kích hoạt ảnh hưởng đến thay đổi trong Lỗi và cách thay đổi trọng lượng ảnh hưởng đến thay đổi trong kích hoạt.
Ý tưởng cơ bản trong học sâu không gì khác ngoài điều đó: điều chỉnh trọng lượng của mô hình để đáp ứng với lỗi mà nó tạo ra, cho đến khi bạn không thể giảm lỗi nữa.
Lưới sâu đào chậm nếu giá trị gradient nhỏ và nhanh nếu giá trị cao. Mọi sai sót trong đào tạo đều dẫn đến kết quả đầu ra không chính xác. Quá trình huấn luyện lưới từ đầu ra trở lại đầu vào được gọi là lan truyền ngược hoặc hỗ trợ ngược. Chúng tôi biết rằng quá trình truyền chuyển tiếp bắt đầu từ đầu vào và hoạt động về phía trước. Back prop thực hiện tính toán ngược / ngược lại gradient từ phải sang trái.
Mỗi khi chúng tôi tính toán một gradient, chúng tôi sử dụng tất cả các gradient trước đó cho đến thời điểm đó.
Chúng ta hãy bắt đầu tại một nút trong lớp đầu ra. Cạnh sử dụng gradient tại nút đó. Khi chúng ta quay trở lại các lớp ẩn, nó trở nên phức tạp hơn. Tích của hai số từ 0 đến 1 cho bạn một số nhỏ hơn. Giá trị gradient tiếp tục nhỏ hơn và kết quả là việc hỗ trợ trở lại mất rất nhiều thời gian để đào tạo và độ chính xác bị ảnh hưởng.
Những thách thức trong thuật toán học sâu
Có những thách thức nhất định đối với cả mạng nơ-ron nông và mạng nơ-ron sâu, như trang bị quá mức và thời gian tính toán. DNN bị ảnh hưởng bởi việc trang bị quá nhiều bởi vì việc sử dụng các lớp trừu tượng được bổ sung cho phép chúng tạo mô hình các phần phụ thuộc hiếm gặp trong dữ liệu huấn luyện.
Regularizationcác phương pháp như bỏ học, dừng sớm, tăng dữ liệu, học chuyển giao được áp dụng trong quá trình đào tạo để chống lại việc trang bị quá nhiều. Bỏ quy định hóa ngẫu nhiên bỏ qua các đơn vị từ các lớp ẩn trong quá trình đào tạo, giúp tránh các phụ thuộc hiếm gặp. Các DNN xem xét một số tham số huấn luyện như kích thước, tức là số lớp và số lượng đơn vị trên mỗi lớp, tốc độ học và trọng số ban đầu. Việc tìm kiếm các tham số tối ưu không phải lúc nào cũng thực tế do chi phí cao về thời gian và tài nguyên tính toán. Một số thủ thuật như chia lô có thể tăng tốc độ tính toán. Sức mạnh xử lý lớn của GPU đã giúp ích đáng kể cho quá trình đào tạo, vì ma trận và các phép tính vectơ cần thiết được thực thi tốt trên GPU.
Rơi ra ngoài
Bỏ học là một kỹ thuật chính quy hóa phổ biến cho mạng nơ-ron. Mạng nơron sâu đặc biệt dễ bị trang bị quá mức.
Bây giờ chúng ta hãy xem bỏ học là gì và nó hoạt động như thế nào.
Theo lời của Geoffrey Hinton, một trong những người tiên phong của Học sâu, 'Nếu bạn có một mạng lưới thần kinh sâu và nó không quá phù hợp, có lẽ bạn nên sử dụng một mạng lưới lớn hơn và sử dụng tính năng bỏ học'.
Dropout là một kỹ thuật trong đó trong mỗi lần lặp lại quá trình giảm độ dốc, chúng tôi thả một tập hợp các nút được chọn ngẫu nhiên. Điều này có nghĩa là chúng ta bỏ qua một số nút ngẫu nhiên như thể chúng không tồn tại.
Mỗi nơ-ron được giữ với xác suất q và được thả ngẫu nhiên với xác suất 1-q. Giá trị q có thể khác nhau đối với mỗi lớp trong mạng nơron. Giá trị 0,5 cho các lớp ẩn và 0 cho lớp đầu vào hoạt động tốt trên nhiều tác vụ.
Trong quá trình đánh giá và dự đoán, không có trường hợp bỏ học nào được sử dụng. Đầu ra của mỗi nơ-ron được nhân với q để đầu vào của lớp tiếp theo có cùng giá trị mong đợi.
Ý tưởng đằng sau Dropout là như sau - Trong một mạng lưới nơ-ron không có sự điều chỉnh của việc bỏ học, các nơ-ron phát triển sự đồng phụ thuộc lẫn nhau dẫn đến việc trang bị quá mức.
Thủ thuật triển khai
Dropout được thực hiện trong các thư viện như TensorFlow và Pytorch bằng cách giữ đầu ra của các nơ-ron được chọn ngẫu nhiên là 0. Nghĩa là, mặc dù nơ-ron tồn tại, đầu ra của nó bị ghi đè là 0.
Dừng sớm
Chúng tôi đào tạo mạng nơron bằng cách sử dụng một thuật toán lặp lại được gọi là gradient descent.
Ý tưởng đằng sau việc dừng sớm là trực quan; chúng tôi ngừng đào tạo khi lỗi bắt đầu tăng lên. Ở đây, do lỗi, chúng tôi có nghĩa là lỗi được đo trên dữ liệu xác thực, là một phần của dữ liệu huấn luyện được sử dụng để điều chỉnh các siêu tham số. Trong trường hợp này, siêu tham số là tiêu chí dừng.
Tăng cường dữ liệu
Quá trình chúng tôi tăng lượng dữ liệu chúng tôi có hoặc tăng cường nó bằng cách sử dụng dữ liệu hiện có và áp dụng một số phép biến đổi trên đó. Các phép biến đổi chính xác được sử dụng phụ thuộc vào nhiệm vụ mà chúng ta dự định đạt được. Hơn nữa, các phép biến đổi giúp mạng nơron phụ thuộc vào kiến trúc của nó.
Ví dụ, trong nhiều tác vụ thị giác máy tính như phân loại đối tượng, một kỹ thuật tăng dữ liệu hiệu quả là thêm các điểm dữ liệu mới được cắt hoặc phiên bản dịch của dữ liệu gốc.
Khi máy tính chấp nhận một hình ảnh làm đầu vào, nó sẽ nhận một mảng giá trị pixel. Giả sử rằng toàn bộ hình ảnh được dịch chuyển sang trái 15 pixel. Chúng tôi áp dụng nhiều sự thay đổi khác nhau theo các hướng khác nhau, dẫn đến một tập dữ liệu được tăng cường gấp nhiều lần kích thước của tập dữ liệu gốc.
Chuyển giao học tập
Quá trình lấy một mô hình được đào tạo trước và “tinh chỉnh” mô hình bằng tập dữ liệu của riêng chúng tôi được gọi là học chuyển giao. Có một số cách để thực hiện việc này. Một số cách được mô tả dưới đây:
Chúng tôi đào tạo mô hình được đào tạo trước trên một tập dữ liệu lớn. Sau đó, chúng tôi loại bỏ lớp cuối cùng của mạng và thay thế bằng một lớp mới với trọng số ngẫu nhiên.
Sau đó, chúng tôi đóng băng trọng số của tất cả các lớp khác và đào tạo mạng bình thường. Ở đây, việc đóng băng các lớp không thay đổi trọng lượng trong quá trình giảm độ dốc hoặc tối ưu hóa.
Khái niệm đằng sau điều này là mô hình được đào tạo trước sẽ hoạt động như một trình trích xuất tính năng và chỉ lớp cuối cùng sẽ được đào tạo về tác vụ hiện tại.