Lợi ích của phân phối bình thường bị cắt cụt trong việc khởi tạo trọng số trong mạng lưới thần kinh là gì?


13

Khi khởi tạo trọng lượng kết nối trong mạng nơ ron phản hồi, điều quan trọng là khởi tạo chúng ngẫu nhiên để tránh mọi đối xứng mà thuật toán học sẽ không thể phá vỡ.

Khuyến nghị mà tôi đã thấy ở nhiều nơi (ví dụ: trong hướng dẫn MNIST của TensorFlow ) là sử dụng phân phối chuẩn bị cắt ngắn bằng cách sử dụng độ lệch chuẩn của , trong đó là số lượng đầu vào cho cho lớp tế bào thần kinh.1NN

Tôi tin rằng công thức độ lệch chuẩn đảm bảo rằng các gradient được sao lưu không hòa tan hoặc khuếch đại quá nhanh. Nhưng tôi không biết tại sao chúng ta lại sử dụng phân phối bình thường bị cắt ngắn chứ không phải phân phối bình thường. Có phải để tránh trọng lượng ngoại lệ hiếm?


Bạn có thể cung cấp nguồn của khuyến nghị này và / hoặc báo giá trực tiếp?
Tim

+ Tim Điểm tốt, tôi đã thêm một liên kết đến một ví dụ. Tôi tin rằng tôi cũng đã thấy khuyến nghị này trong một bài báo về các hoạt động tốt của mạng lưới thần kinh (mặc dù không thể tìm thấy nó).
MiniQuark

Câu trả lời:


13

Tôi nghĩ rằng đó là về sự bão hòa của các tế bào thần kinh. Hãy nghĩ về bạn có một chức năng kích hoạt như sigmoid.

nhập mô tả hình ảnh ở đây

Nếu trọng lượng val của bạn nhận được giá trị> = 2 hoặc <= - 2 tế bào thần kinh của bạn sẽ không học được. Vì vậy, nếu bạn cắt bớt phân phối bình thường của mình, bạn sẽ không gặp phải vấn đề này (ít nhất là từ việc khởi tạo) dựa trên phương sai của bạn. Tôi nghĩ đó là lý do tại sao, tốt hơn là sử dụng cắt ngắn bình thường nói chung.


Vâng, điều đó có ý nghĩa, cảm ơn. Tôi nghĩ bạn có nghĩa là "giá trị> = 2", không phải 1.
MiniQuark

vâng, nó giả sử là giá trị> = 2
Güngor Basa

4

Lợi ích của việc sử dụng phân phối bình thường bị cắt ngắn là để ngăn chặn việc tạo ra "các nơ-ron chết" do sử dụng relu_logits , được giải thích ở đây .

Nhìn chung, người ta nên khởi tạo các trọng số với một lượng nhiễu nhỏ để phá vỡ đối xứng và để ngăn 0 độ dốc. Vì chúng tôi đang sử dụng các nơ-ron ReLU, nên cũng nên khởi tạo chúng với độ lệch ban đầu hơi tích cực để tránh "các nơ-ron chết".


Tôi không chắc việc sử dụng truncated_n normal sẽ ngăn chặn các nơ-ron chết như thế nào: nó sẽ không thêm bất kỳ "sai lệch ban đầu nào tích cực". Bạn có thể vui lòng giải thích?
MiniQuark

1
bởi vì việc truyền bá sẽ chỉ cập nhật các nơ-ron 'sống', với một số đóng góp khác không cho sự lan truyền
Jason
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.