Chuyển tới nội dung chính

Khởi tạo trọng số

Đổi tham sốTính lại thậtThang log

Khởi tạo trọng số

Trước khi học được gì, mạng phải để tín hiệu đi xuyên qua hàng chục lớp mà không tắt lịm cũng không nổ tung. Con số bạn đặt cho trọng số ban đầu quyết định điều đó.

Khi khởi tạo một mạng nơ ron, ta phải điền một con số vào từng trọng số trước cả khi huấn luyện. Nghe như chuyện nhỏ, nhưng chính những con số ban đầu này quyết định xem tín hiệu có sống nổi khi truyền xuôi qua nhiều lớp hay không. Đặt trọng số quá nhỏ, độ lớn tín hiệu bị co lại một chút ở mỗi lớp, và qua vài chục lớp nó tóp gần về 0: các lớp sau chỉ nhận được một tín hiệu gần như phẳng lì, không còn gì để phân biệt. Đặt trọng số quá lớn, độ lớn phình ra mỗi lớp và bùng nổ, hoặc với tanh thì đẩy hàm vào vùng bão hòa nơi đạo hàm gần 0. Cả hai đầu đều làm mạng gần như không huấn luyện được.

Ý tưởng cứu cánh rất gọn: giữ cho phương sai của tín hiệu xấp xỉ như nhau khi đi qua từng lớp. Một lớp tuyến tính rộng n (số đầu vào của lớp) nhân độ lệch tín hiệu với căn(n × phương sai của một trọng số), rồi hàm kích hoạt nhân thêm một hệ số nữa. Muốn tích đó bằng 1, ta phải chọn phương sai trọng số tỉ lệ nghịch với n. Đó chính xác là điều Xavier và He làm, mỗi cách hợp với một loại hàm kích hoạt khác nhau.

Thử ngay

Khởi tạo trọng số · vì sao Xavier và He giữ tín hiệu sống
std lớp cuối = 1.63e-4× mỗi lớp 0.453tín hiệu tóp dần
1e121e91e61e311e-31e-61e-91e-12lớp 0: std ≈ 1.000lớp 1: std ≈ 0.453lớp 2: std ≈ 0.205lớp 3: std ≈ 0.093lớp 4: std ≈ 0.042lớp 5: std ≈ 0.019lớp 6: std ≈ 8.59e-3lớp 7: std ≈ 3.89e-3lớp 8: std ≈ 1.76e-3lớp 9: std ≈ 7.96e-4lớp 10: std ≈ 3.60e-4lớp 11: std ≈ 1.63e-4std = 1lớp 0 · vàolớp 11 · sâu nhất

Thử điều này:

  • Để nguyên ngẫu nhiên quá nhỏ với tanh: các cột tụt dần về phía đáy thang log, tới lớp sâu nhất std chỉ còn cỡ 1e-4, tín hiệu đã tóp gần về 0.
  • Đổi sang Xavier (1/n) với tanh: mọi cột phẳng ngang đúng đường vàng std bằng 1, và giữ phẳng dù bạn kéo độ sâu hay bề rộng đến đâu.
  • Chọn He (2/n) với ReLU: cũng phẳng ổn định; nhưng đổi He thành Xavier (1/n) mà vẫn để ReLU thì các cột lại tụt dần, vì Xavier không bù phần ReLU cắt mất.
  • Chọn ngẫu nhiên quá lớn: các cột dựng đứng vượt lên trên đường vàng, std lớp cuối vọt lên hàng nghìn, đó là bùng nổ. Còn toàn số 0 thì cột đầu bằng 1 rồi tất cả các cột sau rơi thẳng về 0, tín hiệu chết ngay.

Xavier và He

tanh gần như tuyến tính quanh 0 nên giữ nguyên độ lớn tín hiệu, vì vậy Xavier chọn phương sai trọng số bằng 1/n để căn(n × 1/n) đúng bằng 1. ReLU thì cắt bỏ nửa âm, làm độ lệch chỉ còn 1 trên căn 2, nên He chọn phương sai 2/n để bù lại phần bị mất và đưa hệ số mỗi lớp về 1. Vì cả hai chia theo n, chúng tự thích nghi với mọi bề rộng, khác hẳn cách đặt một độ lệch cố định vốn trôi theo bề rộng của lớp.

Điều rút ra

Khởi tạo tốt là khởi tạo giữ cho độ lớn tín hiệu quanh 1 qua từng lớp: Xavier 1/n cho tanh và He 2/n cho ReLU.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Chọn ngẫu nhiên quá nhỏ với tanh rồi kéo độ sâu lên cao, các cột ở những lớp sâu trông ra sao?
  2. 2Vì sao He dùng phương sai 2/n thay vì 1/n như Xavier?
  3. 3Khởi tạo toàn số 0 gây ra chuyện gì với tín hiệu truyền xuôi?