Khi xây dựng một NN, một trong những điều đầu tiên ta cần làm là khởi tạo các giá trị w và b cho mạng. Ví dụ mạng dưới đây có 1 hidden layer, khi này, mỗi sample sẽ được biểu diễn bởi 2 features. Ví dụ x1 = [1x2], mà ta có z = x.wT + b và ta có 2 units ở hidden layer, do đó w1 = [2x2], và a = [1x2].[2x2] = [1x2]. Từ đó, w2 = [2x1] vì ta chỉ có 1 đầu ra [1x2].[2x1] = [1x1].
w1 = [2x2] : cột của ma trận là số unit trong hidden layer, hàng là số feature của input.
b1 = [2x1], vì ta muốn thêm bias vào các unit trong hidden layer, do đó ma trận này phải là cột.
w2 = [2x1]
b2 = [1x1]
w = w - alpha.dJ/dw
dJ/dw đươc tính trong các bài trước là:
dJ/dw = x.(a-y) mà a = g(z) = g(wx + b) = g(b) vì w bằng 0 trên toàn mạng. Khi này dJ/dw = x(g(b) - y) sẽ giống nhau trên toàn mạng, khi thực hiện back-propagation, các unit là giống nhau do đó ta sẽ không thể thực hiện được deep learning khi mà ta muốn thực hiện rất nhiều hàm trên mạng.
Khi này, ta phải khởi tạo giá trị w một cách mặc định như hình dưới đây.
Lí do ta phải nhân giá trị sau khởi tạo với hằng số 0.01 mà không phải 10 hay 100, -100 ... là bởi vì nếu giá trị |w| lớn, khi đó giá trị z lớn, mà theo đồ thị hàm tanh như trên, nếu giá trị z lớn, slope của nó sẽ rất nhỏ do đó việc learning sẽ tốn rất nhiều thời gian, việc khởi tạo w này gọi là zero-centric initialization nghĩa là các giá trị w sẽ gần với giá trị 0 để đảm bảo slope lớn và việc thực hiện GD sẽ diễn ra nhanh hơn.
b và các thông số thêm vào các unit phản ảnh bias, do đó ta có thể khởi tạo các giá trị này là 0 mà không ảnh hưởng tới hoạt động của NN.
Không có nhận xét nào:
Đăng nhận xét