Trọng lượng ban đầu tốt trong một mạng lưới thần kinh là gì?


68

Tôi vừa nghe nói rằng nên chọn trọng số ban đầu của mạng thần kinh từ phạm vi , trong đó là số lượng đầu vào của một tế bào thần kinh nhất định. Giả định rằng các bộ được chuẩn hóa - có nghĩa là 0, phương sai 1 (không biết điều này có quan trọng không).(1d,1d)d

Tại sao đây là một ý tưởng tốt?


Xem luận án thạc sĩ của tôi, trang 81 để biết tổng quan về các kỹ thuật khởi tạo.
Martin Thoma

Câu trả lời:


47

Tôi giả sử bạn đang sử dụng các nơ-ron logistic, và rằng bạn đang luyện tập bằng cách truyền xuống / truyền ngược.

Hàm logistic gần bằng phẳng đối với các đầu vào dương hoặc âm lớn. Đạo hàm tại một đầu vào của là khoảng , nhưng tại đạo hàm khoảng . Điều này có nghĩa là nếu đầu vào của một nơ ron logistic là thì đối với một tín hiệu huấn luyện nhất định, nơ ron sẽ học chậm hơn khoảng lần nếu đầu vào là .21/10101/220001022002

Nếu bạn muốn nơ-ron học nhanh, bạn cần tạo ra tín hiệu luyện tập lớn (chẳng hạn như với hàm mất entropy chéo) hoặc bạn muốn đạo hàm lớn. Để làm cho đạo hàm lớn, bạn đặt các trọng số ban đầu để bạn thường nhận được các đầu vào trong phạm vi .[4,4]

Các trọng lượng ban đầu bạn đưa ra có thể hoặc có thể không hoạt động. Nó phụ thuộc vào cách đầu vào được chuẩn hóa. Nếu các đầu vào được chuẩn hóa có giá trị trung bình là và độ lệch chuẩn , thì tổng số ngẫu nhiên của các số hạng có trọng số thống nhất trên sẽ có nghĩa là và phương sai , độc lập với . Xác suất bạn nhận được một khoản tiền ngoài là nhỏ. Điều đó có nghĩa là khi bạn tăng , bạn không khiến tế bào thần kinh bắt đầu bão hòa để chúng không học.01d(1d,1d)013d[4,4]d

Với các đầu vào không được chuẩn hóa, các trọng số đó có thể không hiệu quả trong việc tránh bão hòa.


1
Vì vậy, về cơ bản, người ta ít nhất nên luôn luôn xem xét bình thường hóa dữ liệu .. Bây giờ nó có ý nghĩa. Bạn có thể giải thích tại sao độ lệch chuẩn sẽ là 1/3 và xác suất tổng đầu vào nằm ngoài phạm vi <-4,4> nhỏ đến mức nào?
elmes

1
Có một số thuộc tính cơ bản của phương sai ngụ ý điều này: Nếu và độc lập, thì và nếu và độc lập và có nghĩa là , sau đó . XYVar(X+Y)=Var(X)+Var(Y)XY0Var(XY)=Var(X)Var(Y)
Douglas Zare

1
Bạn có thể ước tính xác suất rằng một biến ngẫu nhiên có ít nhất độ lệch chuẩn so với giá trị trung bình bằng cách sử dụng bất đẳng thức Ch Quashev. Trong thực tế điều này không sắc nét, nhưng kết quả chính xác phụ thuộc vào phân phối. 12
Douglas Zare

Nhân tiện, tôi tính toán sai. Phương sai là nên độ lệch chuẩn là . 1313
Douglas Zare

1
"Hàm logistic gần bằng phẳng đối với các đầu vào dương hoặc âm lớn. Đạo hàm tại một đầu vào của ..." Không phải đối tượng liên quan có phải là đạo hàm của hàm chi phí của hồi quy logistic không? Trong đó đầu vào của đạo hàm của hàm chi phí đã được hàm logistic chia tỷ lệ thành (0,1) bất kể kích thước của trọng số và tín hiệu?
Moobie

28

[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 tỷ lệ nghịch 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:
    • đối với các đơn vị tiếp tuyến hyperbol: lấy mẫu Đồng phục (-r, r) với (fan-in là số của đầu vào của đơn vị).r=6fan-in+fan-out
    • đối với các đơn vị sigmoid: lấy mẫu Đồng phục (-r, r) với (fan-in là số của đầu vào của đơn vị).r=46fan-in+fan-out
  • trong trường hợp RBM, Gaussian có nghĩa là không có độ 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 ulà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 mạng lưới thần kinh sâu rộng ." Hội nghị quốc tế về trí tuệ nhân tạo và thống kê. 2010.


2
Tôi muốn thêm hai tài liệu tham khảo hữu ích: 1) Đi sâu vào các bộ chỉnh lưu: Vượt qua hiệu suất cấp độ con người trong phân loại ImageNet - về tầm quan trọng của quy mô nhận biết kích hoạt arxiv.org/abs/1502.01852 2) Giải pháp chính xác cho động lực học phi tuyến của học trong các mạng nơ ron tuyến tính sâu arxiv.org/abs/1312.6120 - ma trận trực giao tốt hơn nhiều so với nhiễu Gaussian
old-ufo

1
Một biên tập viên đề xuất các khởi tạo cho sigmoid và tiếp tuyến hyperbol nên được chuyển sang khớp với giấy gốc.
gung - Phục hồi Monica

2
Bạn có muốn giữ bản chỉnh sửa này không, Frank? Nếu không, bạn có thể cuộn nó lại.
gung - Phục hồi Monica

Chắc chắn là tôi đang thiếu gì đó. Nó nói ở đâu trong bài báo Glorot và Bengio (2010) rằng họ khuyên nên sử dụng 4 lần giá trị Công thức 16 khi sử dụng các hàm kích hoạt sigmoid logistic? Công thức 16 xuất phát từ việc sử dụng Công thức 12 và phương sai của phân phối đồng đều, nhưng Công thức 16 có nguồn gốc giả sử kích hoạt đối xứng với đạo hàm đơn vị ở 0. Do đó, ví dụ hàm kích hoạt tanh, nhưng không phải là hàm kích hoạt logistic (không đối xứng). Hơn nữa, họ thậm chí không kiểm tra khởi tạo được đề xuất này với sigmoid logistic; họ chỉ kiểm tra nó với tanh và softsign.
Tommy L

10

Giải thích sau đây được lấy từ cuốn sách: Mạng lưới thần kinh để nhận dạng mẫu của Christopher Bishop. Cuốn sách tuyệt vời! Giả sử trước đây bạn đã làm trắng các đầu vào cho các đơn vị đầu vào, tức là và

<xi>=0
<xi2>=1

Câu hỏi là: làm thế nào để chọn trọng lượng tốt nhất?. Ý tưởng là chọn các giá trị của các trọng số một cách ngẫu nhiên sau một phân phối giúp quá trình tối ưu hóa hội tụ thành một giải pháp có ý nghĩa.

Bạn có để kích hoạt các đơn vị trong lớp đầu tiên, trong đó . Bây giờ, vì bạn chọn trọng số độc lập với đầu vào, và trong đó sigma là phương sai của phân bố trọng số. Để rút ra kết quả này, bạn cần nhớ rằng các trọng số được khởi tạo độc lập với nhau, tức là

y=g(a)
a=i=0dwixi
<a>=i=0d<wixi>=i=0d<wi><xi>=0
<a2>=(i=0dwixi)(i=0dwixi)=i=0d<wi2><xi2>=σ2d
<wiwj>=δij

Lỗi nhỏ: thay vì . <xi2>=10
bayerj

Điều này giải thích cách bạn đạt được một ceratin giả sử bạn biết cần thiết . Theo tôi hiểu, phải nhỏ để cho phép giá trị lớn của đạo hàm sigmoid, nhưng không quá nhỏ để các đồng bằng sẽ không biến mất. Điều này có đúng không? Nếu vậy - đó có phải là một quy tắc tốt để nói rằng phải là ~ 0,2? σααα
Uri

Điều này đặc biệt đúng đối với các mạng thần kinh sâu, nơi các đơn vị có xu hướng bão hòa nhanh chóng khi bạn thêm các lớp. Có một số giấy tờ liên quan đến câu hỏi đó. Một điểm khởi đầu tốt có thể là "Tìm hiểu những khó khăn trong việc đào tạo mạng lưới thần kinh sâu rộng" bằng glorot và bengio
jpmuc

10

Cũng giống như một bản cập nhật, Đi sâu vào các bộ chỉnh lưu: Vượt qua hiệu suất ở cấp độ con người n Phân loại ImageNet của He et al đã giới thiệu một khởi tạo cụ thể với khởi tạo w = U([0,n]) * sqrt(2.0/n)trong đó nsố lượng đầu vào NN của bạn. Tôi đã thấy khởi tạo này được sử dụng trong nhiều tác phẩm gần đây (cũng với ReLU). Họ thực sự chỉ ra cách điều này bắt đầu để giảm tỷ lệ lỗi nhanh hơn nhiều so với (-1 / n, 1 / n) mà bạn đã đề cập. Để được giải thích kỹ lưỡng, hãy xem bài báo nhưng đây là cách nó hội tụ nhanh như thế nào: Sự hội tụ của một mô hình lớn 22 lớp


Ồ Cải thiện đáng kể cho tôi.
Thomas W

Không cho số lượng lớn đầu vào mặc dù ... thất bại với MNIST.
Thomas W

Lưu ý rằng Khởi tạo He được thiết kế riêng cho (P) ReLUs và tính đến thực tế rằng nó không đối xứng (là một trong những giả định trong khởi tạo Xavier). Đừng để bị lừa bởi biểu đồ này ra khỏi bối cảnh!
Ông Tsjolder

5

Ý tưởng là bạn muốn khởi tạo các trọng số theo cách đảm bảo luồng dữ liệu tiến và lùi tốt qua mạng. Đó là, bạn không muốn các kích hoạt liên tục bị thu hẹp hoặc tăng lên khi bạn phát triển qua mạng.

Hình ảnh này cho thấy các kích hoạt của Perceptionron 5 lớp ReLU theo 3 chiến lược khởi tạo khác nhau sau một lần vượt qua MNIST qua mạng.

Kích hoạt trong ReLU MLP với các chiến lược khởi tạo khác nhau

Trong cả ba trường hợp, trọng số được rút ra từ phân phối chuẩn trung tâm bằng 0, được xác định bởi độ lệch chuẩn của nó. Bạn có thể thấy rằng nếu các trọng lượng ban đầu quá nhỏ (độ lệch chuẩn nhỏ) thì các kích hoạt sẽ bị nghẹt và nếu chúng quá lớn thì các kích hoạt sẽ phát nổ. Giá trị trung bình, gần đúng có thể được tìm thấy bằng cách đặt các trọng số sao cho phương sai của các kích hoạt và cập nhật độ dốc vẫn xấp xỉ như khi bạn đi qua mạng.

Tôi đã viết một bài đăng trên blog về khởi tạo trọng lượng đi vào chi tiết hơn, nhưng ý tưởng cơ bản là như sau.

Nếu biểu thị kích hoạt của lớp thứ , kích thước của lớp và các trọng số kết nối chúng với lớp thứ nhất , thì một có thể chỉ ra rằng đối với các hàm kích hoạt với chúng ta cóx(i)iniw(i)(i+1)ff(s)1

Var(x(i+1))=niVar(x(i))Var(w(i))

Để đạt được do đó chúng ta phải áp đặt điều kiệnVar(x(i+1))=Var(x(i))

Var(w(i))=1ni.

Nếu chúng ta biểu thị bởi , trên đường chuyền ngược, chúng ta cũng muốn tương tựLxj(i)Δj(i)

Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).

Trừ khi , chúng ta phải thỏa hiệp giữa hai điều kiện này và một lựa chọn hợp lý là trung bình điều hòani=ni+1

Var(w(i))=2ni+ni+1.

Nếu chúng tôi lấy mẫu trọng số từ phân phối bình thường chúng tôi đáp ứng điều kiện này với . Để phân phối đồng đều chúng ta nên lấy kể từ . Do đó, chúng tôi đã đến lúc khởi tạo Glorot. Ví dụ, đây là chiến lược khởi tạo mặc định cho các lớp chập dày đặc và 2D trong Keras.N(0,σ)σ=2ni+ni+1U(a,a)a=6ni+ni+1Var(U(a,a))=a2/3

Khởi tạo Glorot hoạt động khá tốt đối với các kích hoạt tầm thường và , nhưng không hoạt động tốt cho . May mắn thay, vì chỉ cần loại bỏ các đầu vào âm, nên nó sẽ loại bỏ một nửa phương sai và điều này dễ dàng được sửa đổi bằng cách nhân một trong hai điều kiện của chúng tôi với hai:tanhReLUf(s)=ReLU(s)

Var(w(i))=2ni.

3

Một kỹ thuật khác làm giảm bớt vấn đề khởi tạo trọng lượng là Batch Normalization . Nó hoạt động để chuẩn hóa giá trị trung bình và phương sai của mỗi đơn vị để ổn định việc học như được mô tả trong bài báo gốc . Trong thực tế, các mạng sử dụng Batch Chuẩn hóa (BN) mạnh hơn đáng kể để khởi tạo xấu. BN hoạt động như sau: Chúng tôi tính toán trung bình và phương sai theo kinh nghiệm cho từng lô nhỏ, sau đó chúng tôi chuẩn hóa đầu vào và hình thành đầu ra bằng cách chia tỷ lệ

μB=1mi=1Mxi   and   σB2=1mi=1m(xiμB)2x^i=xiμBσB2+ϵ   and   BN(xi)=γx^i+β
xiBN(xi)x^i bởi và thêm cả hai đều được học trong quá trình đào tạo.γβ

BN giới thiệu hai tham số bổ sung ( và ) cho mỗi lần kích hoạt cho phép có bất kỳ giá trị trung bình và độ lệch chuẩn nào. Lý do cho việc bình thường hóa có thể làm giảm sức mạnh biểu cảm của nó. Tham số hóa mới này có động lực học tập tốt hơn: trong tham số hóa cũ, giá trị trung bình của được xác định bởi sự tương tác phức tạp giữa các tham số của tất cả các lớp trước - vì vậy những thay đổi nhỏ đối với các tham số mạng được khuếch đại khi mạng trở nên sâu hơn. Trong tham số hóa mới, giá trị trung bình của được xác định bởi mà chúng ta tìm hiểu cùng vớiγβx^ixixix^iβγTrong quá trình huấn luyện. Do đó, Batch bình thường hóa ổn định việc học.

Do đó, Batch Normalization cho phép đào tạo nhanh hơn bằng cách sử dụng tỷ lệ học tập cao hơn nhiều và giảm bớt vấn đề khởi tạo xấu. BN cũng cho phép sử dụng các phi tuyến bão hòa bằng cách ngăn mạng bị kẹt trong các chế độ bão hòa. Tóm lại, Batch Chuẩn hóa là một biến đổi khác biệt giới thiệu kích hoạt chuẩn hóa vào mạng. Trong thực tế, một lớp BN có thể được chèn ngay sau khi một lớp được kết nối đầy đủ.

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.