Học sâu với Keras - Học sâu
Như đã nói trong phần giới thiệu, học sâu là một quá trình đào tạo một mạng nơ-ron nhân tạo với một lượng dữ liệu khổng lồ. Sau khi được đào tạo, mạng sẽ có thể cung cấp cho chúng tôi các dự đoán về dữ liệu không nhìn thấy. Trước khi tôi đi sâu hơn trong việc giải thích học sâu là gì, chúng ta hãy nhanh chóng đi qua một số thuật ngữ được sử dụng trong đào tạo mạng nơ-ron.
Mạng thần kinh
Ý tưởng về mạng nơ-ron nhân tạo bắt nguồn từ mạng lưới thần kinh trong não của chúng ta. Một mạng nơ-ron điển hình bao gồm ba lớp - đầu vào, đầu ra và lớp ẩn như trong hình bên dưới.
Đây còn được gọi là shallowmạng thần kinh, vì nó chỉ chứa một lớp ẩn. Bạn thêm nhiều lớp ẩn trong kiến trúc trên để tạo ra một kiến trúc phức tạp hơn.
Mạng sâu
Sơ đồ sau đây cho thấy một mạng sâu bao gồm bốn lớp ẩn, một lớp đầu vào và một lớp đầu ra.
Khi số lượng lớp ẩn được thêm vào mạng, việc huấn luyện nó trở nên phức tạp hơn về tài nguyên cần thiết và thời gian cần thiết để huấn luyện toàn bộ mạng.
Đào tạo mạng
Sau khi bạn xác định kiến trúc mạng, bạn đào tạo nó để thực hiện một số loại dự đoán. Huấn luyện một mạng là một quá trình tìm kiếm các trọng số thích hợp cho mỗi liên kết trong mạng. Trong quá trình đào tạo, dữ liệu chảy từ các lớp Đầu vào đến Đầu ra thông qua các lớp ẩn khác nhau. Vì dữ liệu luôn di chuyển theo một hướng từ đầu vào đến đầu ra, chúng tôi gọi mạng này là Mạng chuyển tiếp và chúng tôi gọi việc truyền dữ liệu là Truyền chuyển tiếp.
Chức năng kích hoạt
Tại mỗi lớp, chúng tôi tính toán tổng trọng số của các đầu vào và đưa nó vào chức năng Kích hoạt. Chức năng kích hoạt mang lại tính phi tuyến cho mạng. Nó chỉ đơn giản là một số chức năng toán học làm gián đoạn kết quả đầu ra. Một số hàm kích hoạt được sử dụng phổ biến nhất là sigmoid, hyperbolic, tangent (tanh), ReLU và Softmax.
Lan truyền ngược
Backpropagation là một thuật toán để học có giám sát. Trong Backpropagation, các lỗi truyền ngược từ đầu ra đến lớp đầu vào. Với một hàm lỗi, chúng tôi tính toán độ dốc của hàm lỗi đối với trọng số được chỉ định tại mỗi kết nối. Việc tính toán gradient tiến hành ngược lại thông qua mạng. Gradient của lớp vật nặng cuối cùng được tính trước và gradient của lớp vật nặng đầu tiên được tính sau cùng.
Tại mỗi lớp, các tính toán từng phần của gradient được sử dụng lại trong việc tính toán gradient cho lớp trước đó. Đây được gọi là Gradient Descent.
Trong hướng dẫn dựa trên dự án này, bạn sẽ xác định một mạng nơ-ron sâu chuyển tiếp và đào tạo nó bằng các kỹ thuật lan truyền ngược và chuyển xuống dốc. May mắn thay, Keras cung cấp cho chúng ta tất cả các API cấp cao để xác định kiến trúc mạng và đào tạo nó bằng cách sử dụng gradient descent. Tiếp theo, bạn sẽ học cách làm điều này trong Keras.
Hệ thống nhận dạng chữ số viết tay
Trong dự án nhỏ này, bạn sẽ áp dụng các kỹ thuật được mô tả trước đó. Bạn sẽ tạo một mạng nơron học sâu sẽ được đào tạo để nhận dạng các chữ số viết tay. Trong bất kỳ dự án học máy nào, thách thức đầu tiên là thu thập dữ liệu. Đặc biệt, đối với mạng học sâu, bạn cần dữ liệu khổng lồ. May mắn thay, đối với vấn đề mà chúng tôi đang cố gắng giải quyết, ai đó đã tạo tập dữ liệu để đào tạo. Đây được gọi là mnist, có sẵn như một phần của các thư viện Keras. Tập dữ liệu bao gồm một số hình ảnh 28x28 pixel của các chữ số viết tay. Bạn sẽ đào tạo mô hình của mình trên phần chính của tập dữ liệu này và phần còn lại của dữ liệu sẽ được sử dụng để xác thực mô hình được đào tạo của bạn.
mô tả dự án
Các mnisttập dữ liệu bao gồm 70000 hình ảnh của các chữ số viết tay. Một vài hình ảnh mẫu được sao chép lại tại đây để bạn tham khảo
Mỗi hình ảnh có kích thước 28 x 28 pixel làm cho nó có tổng cộng 768 pixel ở các mức thang màu xám khác nhau. Hầu hết các điểm ảnh có xu hướng hướng tới bóng đen trong khi chỉ một số ít trong số chúng hướng tới màu trắng. Chúng tôi sẽ đặt sự phân bố của các pixel này trong một mảng hoặc một vector. Ví dụ: sự phân bố các pixel cho một hình ảnh điển hình của chữ số 4 và 5 được thể hiện trong hình bên dưới.
Mỗi hình ảnh có kích thước 28 x 28 pixel làm cho nó có tổng cộng 768 pixel ở các mức thang màu xám khác nhau. Hầu hết các điểm ảnh có xu hướng hướng tới bóng đen trong khi chỉ một số ít trong số chúng hướng tới màu trắng. Chúng tôi sẽ đặt sự phân bố của các pixel này trong một mảng hoặc một vector. Ví dụ: sự phân bố các pixel cho một hình ảnh điển hình của chữ số 4 và 5 được thể hiện trong hình bên dưới.
Rõ ràng, bạn có thể thấy rằng sự phân bố của các pixel (đặc biệt là những pixel có xu hướng thiên về tông màu trắng) khác nhau, điều này phân biệt các chữ số mà chúng đại diện. Chúng tôi sẽ cung cấp phân phối 784 pixel này cho mạng của chúng tôi làm đầu vào của nó. Đầu ra của mạng sẽ bao gồm 10 loại đại diện cho một chữ số từ 0 đến 9.
Mạng của chúng ta sẽ bao gồm 4 lớp - một lớp đầu vào, một lớp đầu ra và hai lớp ẩn. Mỗi lớp ẩn sẽ chứa 512 nút. Mỗi lớp được kết nối đầy đủ với lớp tiếp theo. Khi chúng tôi đào tạo mạng, chúng tôi sẽ tính toán trọng số cho mỗi kết nối. Chúng tôi đào tạo mạng bằng cách áp dụng lan truyền ngược và giảm độ dốc mà chúng tôi đã thảo luận trước đó.