Theo như tôi biết thì hai công thức bạn đưa ra gần như là khởi tạo tiêu chuẩn. Tôi đã thực hiện đánh giá tài liệu một thời gian trước đây, tôi đã sao chép nó dưới đây nếu quan tâm.
[1] giải quyết câu hỏi:
Đầu tiên, các trọng số không nên được đặt thành số không để phá vỡ tính đối xứng khi phản hồi lại:
Xu hướng nói chung có thể được khởi tạo về 0 nhưng trọng số cần phải được khởi tạo cẩn thận để phá vỡ tính đối xứng giữa các đơn vị ẩn của cùng một lớp. Do các đơn vị đầu ra khác nhau nhận được tín hiệu gradient khác nhau, vấn đề phá vỡ đối xứng này không liên quan đến các trọng số đầu ra (thành các đơn vị đầu ra), do đó cũng có thể được đặt thành không.
Một số chiến lược khởi tạo:
- [2] và [3] khuyên bạn nên chia tỷ lệ theo nghịch đảo của căn bậc hai của quạt trong
- Glorot và Bengio (2010) và Hướng dẫn học tập sâu sử dụng kết hợp giữa fan-in và fan-out:
- r = 6fan-in + fan-out---------√
- r = 4 6fan-in + fan-out---------√
- trong trường hợp RBM, Gaussian trung bình bằng 0 với độ lệch chuẩn nhỏ khoảng 0,1 hoặc 0,01 hoạt động tốt (Hinton, 2010) để khởi tạo các trọng số.
- Khởi tạo ma trận ngẫu nhiên trực giao, tức là
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
sử dụng u
làm ma trận khởi tạo của bạn.
Ngoài ra, đào tạo trước không giám sát có thể giúp đỡ trong một số tình huống:
Một lựa chọn quan trọng là liệu người ta có nên sử dụng đào tạo trước không được giám sát (và sử dụng thuật toán học tính năng không giám sát nào) để khởi tạo các tham số. Trong hầu hết các cài đặt, chúng tôi đã tìm thấy đào tạo trước không được giám sát để giúp đỡ và rất hiếm khi bị tổn thương, nhưng tất nhiên điều đó bao hàm thời gian đào tạo bổ sung và các thông số siêu bổ sung.
Một số thư viện ANN cũng có một số danh sách thú vị, ví dụ Lasagne :
Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b]) Glorot weight initialization.
GlorotNormal([gain, c01b]) Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b]) He weight initialization.
HeNormal([gain, c01b]) He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain]) Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.
[1] Bengio, Yoshua. " Các khuyến nghị thiết thực cho đào tạo dựa trên độ dốc của các kiến trúc sâu. " Mạng lưới thần kinh: Thủ thuật của thương mại. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB và Muller, K. (1998a). Backprop hiệu quả. Trong mạng nơ-ron, thủ thuật của thương mại .
[3] Glorot, Xavier và Yoshua Bengio. " Hiểu được những khó khăn của việc đào tạo các mạng lưới thần kinh ăn sâu ." Hội nghị quốc tế về trí tuệ nhân tạo và thống kê. 2010.