Khởi tạo trọng số
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
Thử điều này:
- Để nguyên
ngẫu nhiên quá nhỏvớitanh: 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ớitanh: mọi cột phẳng ngang đúng đường vàng std bằng1, và giữ phẳng dù bạn kéo độ sâu hay bề rộng đến đâu. - Chọn
He (2/n)vớiReLU: cũng phẳng ổn định; nhưng đổi He thànhXavier (1/n)mà vẫn đểReLUthì các cột lại tụt dần, vì Xavier không bù phầnReLUcắ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òntoàn số 0thì cột đầu bằng1rồ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.
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.
- 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?
- 2Vì sao He dùng phương sai 2/n thay vì 1/n như Xavier?
- 3Khởi tạo toàn số 0 gây ra chuyện gì với tín hiệu truyền xuôi?