DEEP NEURAL NETWORK LÀ GÌ

 - 

Trong bài thứ tư này, chúng ta sẽ tìm hiểu về Deep neural networks. Từ này đã trở lên thông dụng ngày nay trong ngành công nghiệp và lĩnh vực nghiên cứu.

Bạn đang xem: Deep neural network là gì

Mục tiêu của bài viết này :

Xem deep neural networks khi các lớp kết nối với nhau.Xây dựng và huấn luyện một mạng thần kinh sâu có L lớpPhân tích kích thước ma trận và vectơ để kiểm tra việc triển khai mạng thần kinhHiểu cách sử dụng bộ đệm để truyền thông tin từ forward propagation sang backward propagationHiểu vai trò của hyperparameters trong Deep learning

Notation:

Ký hiệu chữ cái in hoa A, Z, W, B là các ma trậnKý hiệu các chữ cái thường a, z, w, b là các vector kích thước (x,1)Ký hiệu đại diện cho lớp thứ lthl^{th}lth .L là số lớp của mạng lưới thần kinhnln^{l}nl là số unit trong lớp thứ llla=g(z)=g(wa+b)a^{}= g(z^{}) = g(w^{}a^{} +b^{})a=g(z)=g(wa+b) là lthl^{th}lth layer"s activations với g ở đây là các hàm kích hoạt như sigmod(), relu(), ...WW^{}W và bb^{}b là các thông số của lớp lthl^{th}lth (layer parametes).Ký hiệu (i)(i)(i) đại diện cho ithi^{th}ith example.VÍ dụ: x(i)x^{(i)}x(i) là thí dụ thứ ithi^{th}ith của tập training.Ký hiệu chữ thường iii đại diện cho ví trí thứ ithi^{th}ith của 1 vectorVí dụ: aia^{}_iai​ dại diện cho ví trí ithi^{th}ith của lthl^{th}lth layer"s activations.

Đây là các ký hiệu mà chúng ta sẽ dùng trong cả bài này. Hãy ghi nhớ chúng để bắt đầu bài đọc, hoặc bạn có thể nhanh chóng kéo lên đầu trang để xem trong trường học bạn quên.

*

Một Deep Neural Network có số lượng lớp ấn nhiều hơn.

*

Với mạng thân trên, ta thấy các điểm như sau:

Có L=4L=4L=4 layerSố unit của các layer lần lượt là n<1>=5n^{<1>}=5n<1>=5, n<2>=5n^{<2>}=5n<2>=5, n<3>=3n^{<3>}=3n<3>=3, n<4>=1n^{<4>}=1n<4>=1Forward Propagation in a Deep Network

Đâu tiên chúng ta nhìn vào Forward Propagation của mạng lưới thần kinh trên với 1 dữ liệu a<0>=x=a^{<0>} = x = \begin{bmatrix} & x_{1} \\ & x_{2} \\ & x_{3}\end{bmatrix}a<0>=x=⎣⎡​​x1​x2​x3​​⎦⎤​đào tạo duy nhất. Ta có:

z<1>=w<1>a<0>+b<1>;a<1>=g<1>(z<1>)z<2>=w<2>a<1>+b<2>;a<2>=g<2>(z<2>)z<3>=w<3>a<2>+b<3>;a<3>=g<3>(z<3>)z<4>=w<4>a<3>+b<4>;a<2>=g<3>(z<4>)=y^z^{<1>} = w^{<1>}a^{<0>} + b^{<1>} ; a^{<1>} = g^{<1>}(z^{<1>}) \newline z^{<2>} = w^{<2>}a^{<1>} + b^{<2>}; a^{<2>} = g^{<2>}(z^{<2>}) \newlinez^{<3>} = w^{<3>}a^{<2>} + b^{<3>}; a^{<3>} = g^{<3>}(z^{<3>}) \newlinez^{<4>} = w^{<4>}a^{<3>} + b^{<4>}; a^{<2>} = g^{<3>}(z^{<4>}) =\hat{y} \newlinez<1>=w<1>a<0>+b<1>;a<1>=g<1>(z<1>)z<2>=w<2>a<1>+b<2>;a<2>=g<2>(z<2>)z<3>=w<3>a<2>+b<3>;a<3>=g<3>(z<3>)z<4>=w<4>a<3>+b<4>;a<2>=g<3>(z<4>)=y^​

Tổng quát hóa với trường hợp có LLL layer :

z=wa+bz^{} = w^{}a^{} + b^{} z=wa+b

a=g(z)a^{} = g^{}(z^{}) \newlinea=g(z)

Chúng ta có thể vectorize các bước này khi có m dữ liệu đào tạo như sau:

Z=WA+BZ^{} = W^{}A^{} + B^{} Z=WA+B

A=g(Z)A^{} = g^{}(Z^{}) \newlineA=g(Z)

Getting your matrix dimensions right

Phân tích kích thước của ma trận là một trong những công cụ gỡ lỗi tốt nhất để kiểm tra mức độ chính xác của code của chúng ta. Chúng ta sẽ thảo luận về những gì nên là kích thước chính xác cho mỗi ma trận trong phần này. Hãy xem xét ví dụ sau:

*

Mạng lưới thần kinh trên có số layer L = 5 với 4 hidden layer và 1 output layer. Số unit trong mỗi layer được thể hiện trên hình vẽ.

Ta phân tích kích thước của z<1>=w<1>a<0>+b<1>z^{<1>} = w^{<1>}a^{<0>} + b^{<1>}z<1>=w<1>a<0>+b<1>. Khi có 1 dữ liệu đào tạo.

Kích thước của w<1>:(3,2)w^{<1>}: (3,2)w<1>:(3,2) hay (n<0>,n<1>)(n^{<0>}, n^{<1>})(n<0>,n<1>)Kích thước của x=a<0>=x:(2,1)x=a^{<0>} = x: (2,1)x=a<0>=x:(2,1) hay (n<0>,1)(n^{<0>}, 1)(n<0>,1)Kích thước của b<1>:(3,1)b^{<1>}: (3,1)b<1>:(3,1) hay (n<1>,1)(n^{<1>}, 1)(n<1>,1)Do đó, kích thước của z<1>:(3,1)z^{<1>}: (3,1)z<1>:(3,1) hay (n<1>,1)(n^{<1>}, 1)(n<1>,1)

Suy ra dạng tổng quát của W,bW, bW,b và các dẫn suất của chúng khi có m training example:

W:(n,n)W^{}: (n^{}, n^{})W:(n,n)b:(n,1)b^{}: (n^{}, 1)b:(n,1)dW=∂J∂W:(n,n)dW^{} = \frac{\partial \mathcal{J} }{\partial W^{}}: (n^{}, n^{})dW=∂W∂J​:(n,n) trong đó L là hàm loss function.db=∂J∂Z:((n,1)db^{} = \frac{\partial \mathcal{J} }{\partial Z^{}}: ((n^{}, 1)db=∂Z∂J​:((n,1)Kích thước của Z,A,dZ,dA:(n,m)Z^{}, A^{}, dZ^{}, dA^{} : (n^{}, m)Z,A,dZ,dA:(n,m)

Đây là một số kích thước ma trận tổng quát sẽ giúp code của bạn chạy một cách trơn tru. Chúng ta đã thấy một số điều cơ bản của deep neural networks cho đến thời điểm này. Nhưng tại sao chúng ta cần đại diện sâu sắc ngay từ đầu? Tại sao làm cho mọi thứ phức tạp khi giải pháp dễ dàng hơn tồn tại? Hãy cùng tìm hiểu!

Why Deep Representations?

Trong các mạng lưới thần kinh sâu, chúng ta có một số lượng lớn các lớp ẩn. Những lớp ẩn này thực sự đang làm gì? Để hiểu điều này, hãy xem xét hình ảnh dưới đây:

*

Mạng lưới thần kinh sâu tìm mối quan hệ với dữ liệu (quan hệ đơn giản đến phức tạp). Lớp ẩn đầu tiên có thể đang làm gì, đang cố gắng tìm các hàm đơn giản như xác định các cạnh trong ảnh trên. Và khi chúng ta đi sâu hơn vào mạng, các chức năng đơn giản này kết hợp với nhau để tạo thành các chức năng phức tạp hơn như nhận diện khuôn mặt. Một số ví dụ phổ biến về việc tận dụng **deep neural network ** là:

Ta xem xét bất kỳ lớp trong Deep Neural Network, đầu vào của lớp này là các activation từ lớp trước (l-1) và đầu ra của lớp này là các activations của chinh lớp nó.

Input: aa^{}aOutput: aa^{}a

Lớp này trước tiên tính zz^{}z dựa trên aa^{}a được truyền vào . zz^{}z này được lưu dưới dạng cache, trong cache này cũng lưu W,bW^{}, b^{}W,b để về sau còn cập nhật các tham số. Đối với backward propagation, trước tiên, nó sẽ tính dada^{}da , nghĩa là đạo hàm activation ở lớp lthl^{th}lth, đạo hàm của trọng số dW,db,dZdW^{}, db^{},dZ^{}dW,db,dZ, và cuối cùng là dada^{}da . Các bạn hãy hình dùng các bước như sau:

*

Đay là cách mỗi khối hay lớp trong Deep Neural Network. Bây giờ ta sẽ xem cách thức hiện của Forward and Backward Propagation trong từng khối như thế nào.

Forward and Backward Propagation

Forward Propagation for layer lll:

Input: aa^{}aOutput: a,cache(z>)a^{}, cache(z^{}>)a,cache(z>) trong đó ZZ^{}Z là một hàm của W,bW^{}, b^{}W,b

Với 1 dữ liệu đạo tạo thì ta tính như sau:

Z=Wa+bZ^{} = W^{} a^{} + b^{} Z=Wa+b

a=g(Z)a^{} = g^{}(Z^{})a=g(Z)

Vectorized với m dữ liệu đào tạo ta được:

Z=WA+bZ^{} = W^{}A^{} +b^{}Z=WA+b

với A<0>=XA^{<0>} = XA<0>=X.

A=g(Z)A^{} = g^{}(Z^{})A=g(Z)

Chúng ta sẽ tính ZZZ và AAA cho mỗi lớp của mạng. Sau khi tính toán các activations, bước tiếp theo là backward propagation (lan truyền ngược), trong đó chúng tôi cập nhật các trọng số bằng cách sử dụng gradient descent như mình đã trình bày ở các bài trước.

Xem thêm: Bông So Đũa Nấu Canh Chua - Canh Chua Bông So Đũa Chay

Backward propagation for layer lll

Input: dada^{}daOuput: da,dW,dbda^{}, dW^{}, db^{}da,dW,db

Với 1 dữ liệu đạo tạo thì ta tính như sau:

dZ=∂L∂Z=da∗g′(Z)dZ^{} = \frac{\partial \mathcal{L} }{\partial Z^{}} = da^{} * g"^{}(Z^{})dZ=∂Z∂L​=da∗g′(Z)

dW=∂J∂W=dZaTdW^{} = \frac{\partial \mathcal{J} }{\partial W^{}} = dZ^{} a^{ T} dW=∂W∂J​=dZaT

db=∂J∂b=dZdb^{} = \frac{\partial \mathcal{J} }{\partial b^{}} = dZ^{}db=∂b∂J​=dZ

da=∂L∂a=WTdZda^{} = \frac{\partial \mathcal{L} }{\partial a^{}} = W^{ T} dZ^{} da=∂a∂L​=WTdZ

Vectorized với m dữ liệu đào tạo ta được:

dZ=∂L∂Z=da∗g′(Z)dZ^{} = \frac{\partial \mathcal{L} }{\partial Z^{}} = da^{} * g"^{}(Z^{})dZ=∂Z∂L​=da∗g′(Z)

dW=∂J∂W=1mdZATdW^{} = \frac{\partial \mathcal{J} }{\partial W^{}} = \frac{1}{m} dZ^{} A^{ T} dW=∂W∂J​=m1​dZAT

db=∂J∂b=1m∑i=1mdZ(i)db^{} = \frac{\partial \mathcal{J} }{\partial b^{}} = \frac{1}{m} \sum_{i = 1}^{m} dZ^{(i)}db=∂b∂J​=m1​i=1∑m​dZ(i)

dA=∂L∂A=WTdZdA^{} = \frac{\partial \mathcal{L} }{\partial A^{}} = W^{ T} dZ^{} dA=∂A∂L​=WTdZ

Với LLL ở đây là hàm loss fuction L(y−y^)L(y - \hat{y})L(y−y^​) và cost function J=1m∑i=1mL(y((i)−y(i)^)J = \frac{1}{m} \sum_{i = 1}^{m}L(y(^{(i)} - \hat{y^{(i)}})J=m1​∑i=1m​L(y((i)−y(i)^​)

Với lập trình thì ta có thể viết của thể tính dW, db, dA_prev như sau:

dW = 1/m * np.dot(dZ, A_prev.T) db = 1/m * np.sum(dZ, axis = 1, keepdims = True) dA_prev = np.dot(W.T, dZ)

Update Parameters

Sau khi Backward propagation, thì ta sẽ cập nhật tham số như sau, với α \alpha \text{ }α  là learning rate ta tự khởi tạo.

W=W−α dWW^{} = W^{} - \alpha \text{ } dW^{} W=W−α dW

b=b−α dbb^{} = b^{} - \alpha \text{ } db^{} b=b−α db

Đây là cách chúng ta thực hiện deep neural networks..

Deep neural networks. hoạt động tốt đáng ngạc nhiên (có thể không quá ngạc nhiên nếu bạn đã sử dụng chúng trước đó!). Chỉ chạy một vài dòng mã cho chúng ta kết quả khả quan. Điều này là do chúng tôi đang cung cấp một lượng lớn dữ liệu cho mạng và nó đang học hỏi từ dữ liệu đó bằng cách sử dụng các lớp ẩn.

Chọn đúng hyperparameters giúp chúng ta làm cho mô hình của mình hiệu quả hơn. Mình sẽ đề cập chi tiết về điều chỉnh siêu tham số trong bài viết tiếp theo của loạt bài này.

Parameters vs Hyperparameters

Đây là một câu hỏi thường gặp của những người mới học Deep learning. Sự khác biệt chính giữa Parameters vs Hyperparameters là các Parameters được mô hình học trong thời gian đào tạo, trong khi Hyperparameters có thể được thay đổi trước khi đào tạo mô hình và ta phải tự chọn qua kinh ngiệm.

Các Parameters của mạng nơ ron sâu là WWW và bbb, mô hình cập nhật trong bước Backward propagation. Mặt khác, có rất nhiều Hyperparameters cho một deep NN,, bao gồm:

Learning rate α \alpha \text{ }α Number of iterationsNumber of hidden layersUnits in each hidden layerChọn activation function

Đây là một tổng quan ngắn gọn về sự khác biệt giữa hai khía cạnh này. Bạn có thể tham khảo bài viết của anh Toàn phần thứ 7 để biết thêm chi tiết.

ReferencesTL,DR

Đến đây đã hoàn thành khóa học đầu tiên Neural Networks and Deep Learning(Course 1 of the Deep Learning Specialization) Bây giờ chúng ta biết làm thế nào để thực hiện forward and backward propagation and gradient descent cho các deep neural networks. Chúng ta cũng đã thấy làm thế nào vectorization giúp chúng ta thoát khỏi các vòng lặp rõ ràng, làm cho code của chúng ta hiệu quả trong quá trình.

Chắc 1 số bài viết tới mình sẽ giới thiệu các nền tảng để lập trình bao gồm python, numpy, panda, matplot, sau đó mình sẽ hướng dẫn làm lại bài thực hành tuần 4 trên khóa học để các bạn có cái nhìn rõ nét hơn cách code các phần ở trên từng bước một, để các bạn về sau khi làm quen với các thư viện có sẵn như Tensorflow, keras, pytorch,.. sẽ hiểu bên dưới chúng thực hiện những gì và để mình cũng nhớ lâu hơn

*
. Rất mong được sự ủng hộ của các bạn.

Xem thêm: Mách Bạn Cách Pha Cà Phê Sữa Đúng Chuẩn Không Phải Ai Củng Biết

Trong phần tiếp theo (sẽ bao gồm khóa 2) sẽ 1 thời dài sau, chúng ta sẽ xem làm thế nào chúng ta có thể cải thiện mạng lưới thần kinh sâu bằng cách điều chỉnh hyperparameter, regularizationoptimization. Đó là một trong những khía cạnh khó khăn và hấp dẫn hơn của deep learning.