Tại sao trọng số của Mạng thần kinh nên được khởi tạo thành số ngẫu nhiên?


105

Tôi đang cố gắng xây dựng một mạng nơ-ron từ đầu. Trên tất cả các tài liệu về AI, có sự đồng thuận rằng trọng số nên được khởi tạo thành số ngẫu nhiên để mạng hội tụ nhanh hơn.

Nhưng tại sao trọng số ban đầu của mạng nơ-ron được khởi tạo dưới dạng số ngẫu nhiên?

Tôi đã đọc ở đâu đó rằng điều này được thực hiện để "phá vỡ sự đối xứng" và điều này làm cho mạng nơ-ron học nhanh hơn. Làm thế nào để phá vỡ đối xứng khiến nó học nhanh hơn?

Khởi tạo trọng số bằng 0 có phải là một ý tưởng tốt hơn không? Bằng cách đó, các trọng số sẽ có thể tìm thấy giá trị của chúng (cho dù dương hay âm) nhanh hơn?

Có một số triết lý cơ bản khác đằng sau việc ngẫu nhiên hóa các trọng số ngoài việc hy vọng rằng chúng sẽ ở gần giá trị tối ưu khi khởi tạo?


7
Điều này có vẻ phù hợp hơn với Cross Validated .
Sycorax

Câu trả lời:


140

Phá vỡ sự đối xứng là điều cần thiết ở đây, và không phải vì lý do hiệu suất. Hãy tưởng tượng 2 lớp đầu tiên của perceptron nhiều lớp (lớp đầu vào và lớp ẩn):

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

Trong quá trình truyền về phía trước, mỗi đơn vị trong lớp ẩn nhận được tín hiệu:

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

Nghĩa là, mỗi đơn vị ẩn nhận được tổng đầu vào nhân với trọng số tương ứng.

Bây giờ hãy tưởng tượng rằng bạn khởi tạo tất cả các trọng số với cùng một giá trị (ví dụ: 0 hoặc một). Trong trường hợp này, mỗi đơn vị ẩn sẽ nhận được chính xác cùng một tín hiệu . Ví dụ: nếu tất cả các trọng số được khởi tạo bằng 1, mỗi đơn vị nhận được tín hiệu bằng tổng đầu vào (và đầu ra sigmoid(sum(inputs))). Nếu tất cả các trọng số đều là số không, điều này thậm chí còn tệ hơn, mọi đơn vị ẩn sẽ nhận được tín hiệu bằng không. Bất kể đầu vào là gì - nếu tất cả các trọng số đều giống nhau, thì tất cả các đơn vị trong lớp ẩn cũng sẽ giống nhau .

Đây là vấn đề chính với tính đối xứng và lý do tại sao bạn nên khởi tạo trọng số một cách ngẫu nhiên (hoặc ít nhất là với các giá trị khác nhau). Lưu ý rằng sự cố này ảnh hưởng đến tất cả các kiến ​​trúc sử dụng từng kết nối.


1
Giải thích tuyệt vời. Nhưng tại sao lại sử dụng từ symmetrykhông correlation? Ai đã sử dụng từ đầu tiên?
nn0p

1
@ nn0p: tương quan ngụ ý rằng 2 tín hiệu thay đổi theo một hướng giống nhau, nhưng không phải luôn luôn và không có cùng độ lớn. Ít nhất theo như tôi biết, đối xứng không có định nghĩa chính thức và được sử dụng ở đây để biểu thị chính xác các tín hiệu giống nhau trên tất cả các liên kết giữa các nút, điều này làm cho việc đào tạo trở nên vô ích.
bạn

@ bạn bè hơn là trong trường hợp chúng tôi sử dụng tính năng bỏ cuộc, việc ngẫu nhiên hóa không cần thiết hơn. Liệu tôi có sai?
emanuele

1
@emanuele Dropout bản thân nó là một loại ngẫu nhiên, vì vậy có, nó sẽ hoạt động. Tuy nhiên, tất cả các kết nối không bị "loại bỏ" ở mỗi lần lặp, vẫn sẽ nhận được cập nhật đối xứng, vì vậy tôi đoán việc học sẽ khá chậm và do đó, bạn vẫn nên sử dụng khởi tạo ngẫu nhiên trong bất kỳ mạng thực tế nào.

Điều này giải thích rõ về forwardprop, nhưng backprop thì sao?
zell

74

Sự giống nhau:

Tôi hy vọng đó là một sự tương tự tốt. Tôi đã cố gắng giải thích nó càng đơn giản càng tốt.

Hãy tưởng tượng rằng ai đó đã thả bạn từ trực thăng xuống một đỉnh núi không xác định và bạn bị mắc kẹt ở đó. Mọi nơi đều mờ mịt. Điều duy nhất bạn biết là bạn phải xuống mực nước biển bằng cách nào đó. Bạn nên đi theo hướng nào để xuống điểm thấp nhất có thể?

Nếu bạn không thể tìm thấy cách xuống mực nước biển và do đó, máy bay trực thăng sẽ đưa bạn một lần nữa và sẽ thả bạn xuống cùng một vị trí trên đỉnh núi. Bạn sẽ phải thực hiện lại các hướng dẫn như vậy bởi vì bạn đang "khởi tạo" bản thân đến cùng các vị trí xuất phát .

Tuy nhiên, mỗi khi máy bay trực thăng thả bạn xuống một nơi nào đó ngẫu nhiên trên núi, bạn sẽ thực hiện các hướng và bước khác nhau. Vì vậy, sẽ có cơ hội tốt hơn để bạn đạt đến điểm thấp nhất có thể.

Đây là những gì có nghĩa là phá vỡ đối xứng . Khởi tạo không đối xứng ( khác nhau ) nên bạn có thể tìm các giải pháp khác nhau cho cùng một vấn đề.

Trong sự tương tự này, nơi bạn hạ cánh là các quả nặng . Vì vậy, với các trọng số khác nhau, có nhiều cơ hội đạt đến điểm thấp nhất ( hoặc thấp hơn ).

Ngoài ra, nó làm tăng entropy trong hệ thống để hệ thống có thể tạo thêm thông tin để giúp bạn tìm ra các điểm thấp hơn (điểm tối thiểu cục bộ hoặc toàn cầu ).

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


10
Có vẻ như máy bay trực thăng thả bạn ở một nơi nào đó ngẫu nhiên trên núi vài lần, tuy nhiên trong học sâu, chúng tôi chỉ ban đầu các trọng lượng một cách ngẫu nhiên chỉ một lần.
YuFeng Shen

1
Đây là một lời giải thích trực quan thực sự. Chúng ta cũng nên lưu ý rằng NN hầu như không bao giờ lồi - vì vậy ngẫu nhiên là cách lý tưởng để thực hiện - nhưng nếu bạn có hàm mất lồi, thì tất nhiên không quan trọng bạn khởi tạo trọng số của mình.
Kingz

4
Đó là một phép tương tự tốt - nhưng sẽ hợp lý hơn nếu giả định rằng bạn và bạn bè của bạn đang bị bỏ rơi trên núi (tức là các nút trong mạng) - ở cùng một vị trí hoặc những người khác nhau ở các điểm khác nhau. Và giả sử rằng tất cả các bạn có thể giao tiếp với nhau. Các điểm khác nhau có giao tiếp sẽ cho phép xuống nhanh hơn. Cùng một chỗ có nghĩa là mọi người đều có khả năng đi xuống cùng một con đường.
ahmedhosny

26

Câu trả lời là khá đơn giản. Các thuật toán đào tạo cơ bản có bản chất là tham lam - chúng không tìm ra giải pháp tối ưu toàn cục, mà là - giải pháp cục bộ "gần nhất". Kết quả là, bắt đầu từ bất kỳ khởi tạo cố định nào sẽ làm sai lệch giải pháp của bạn đối với một số tập hợp trọng số cụ thể. Nếu bạn làm điều đó một cách ngẫu nhiên (và có thể nhiều lần) thì ít có khả năng bạn sẽ bị mắc kẹt ở một số phần kỳ lạ của bề mặt lỗi.

Đối số tương tự cũng áp dụng cho các thuật toán khác, những thuật toán này không thể tìm thấy giá trị tối ưu toàn cục (k-mean, EM, v.v.) và không áp dụng cho các kỹ thuật tối ưu hóa toàn cục (như thuật toán SMO cho SVM).


Vì vậy, nó không được đảm bảo rằng nó sẽ không bị mắc kẹt trong cực tiểu cục bộ chỉ bằng cách ngẫu nhiên? Nhưng sau nhiều lần chạy với các trọng số ngẫu nhiên khác nhau, nó có thể đạt mức tối thiểu chung không?
Shayan RC

1
Không có gì đảm bảo, nhưng nhiều lần khởi tạo có thể giúp ít nhất đạt được mức tối ưu thực sự.
lejlot

Có bất kỳ công thức hoặc quy tắc tiêu chuẩn nào để thiết lập giá trị để khởi tạo các trọng số không ?? Tôi có mạng nơ-ron truyền ngược, nhiều lớp, truyền ngược, nơi hàm sigmoid được sử dụng.
lkkkk

có một số quy tắc của ngón tay cái trong cuốn sách S.Haykin "mạng thần kinh"
lejlot

3
Đây không phải là lý do tại sao mọi người sử dụng khởi tạo ngẫu nhiên vì hầu hết mọi người không khởi động lại quá trình đào tạo nhiều lần với các lần khởi tạo ngẫu nhiên khác nhau và mạng vẫn có thể truy cập vào optima cục bộ tốt.
cesarsalgado

4

Như bạn đã đề cập, điểm mấu chốt là phá vỡ sự đối xứng . Bởi vì nếu bạn khởi tạo tất cả các trọng số bằng 0 thì tất cả các nơ-ron ẩn (đơn vị) trong mạng nơ-ron của bạn sẽ thực hiện các phép tính giống hệt nhau. Đây không phải là điều chúng tôi mong muốn bởi vì chúng tôi muốn các đơn vị ẩn khác nhau tính các chức năng khác nhau. Tuy nhiên, điều này là không thể nếu bạn khởi tạo tất cả thành cùng một giá trị.


2
  1. Khởi tạo trọng số bằng 0 có phải là một ý tưởng tốt hơn không? Bằng cách đó, các trọng số sẽ có thể tìm thấy giá trị của chúng (cho dù dương hay âm) nhanh hơn?

  2. Làm thế nào để phá vỡ đối xứng khiến nó học nhanh hơn?

Nếu bạn khởi tạo tất cả các trọng số bằng 0, thì tất cả các nơ-ron của tất cả các lớp sẽ thực hiện cùng một phép tính, cho ra cùng một đầu ra và ở đó làm cho toàn bộ mạng sâu trở nên vô dụng . Nếu trọng số bằng 0, độ phức tạp của toàn bộ mạng sâu sẽ giống như độ phức tạp của một nơ-ron đơn lẻ và các dự đoán sẽ không có gì tốt hơn là ngẫu nhiên.

Các nút nằm cạnh nhau trong một lớp ẩn được kết nối với các đầu vào giống nhau phải có trọng số khác nhau để thuật toán học cập nhật trọng số.

Bằng cách đặt trọng số khác 0 (nhưng gần bằng 0 như 0,1, v.v.), thuật toán sẽ tìm hiểu trọng số trong các lần lặp tiếp theo và sẽ không bị mắc kẹt. Bằng cách này, việc phá vỡ đối xứng sẽ xảy ra.

  1. Có một số triết lý cơ bản khác đằng sau việc ngẫu nhiên hóa các trọng số ngoài việc hy vọng rằng chúng sẽ ở gần giá trị tối ưu khi khởi tạo?

Các thuật toán tối ưu hóa ngẫu nhiên chẳng hạn như giảm độ dốc ngẫu nhiên sử dụng tính ngẫu nhiên trong việc chọn điểm bắt đầu cho tìm kiếm và trong quá trình tìm kiếm.

Quá trình tìm kiếm hoặc học tập của một mạng nơ-ron được gọi là sự hội tụ. Khám phá một giải pháp tối ưu phụ hoặc kết quả optima cục bộ thành hội tụ sớm.

Thay vì dựa vào một optima cục bộ, nếu bạn chạy thuật toán của mình nhiều lần với các trọng số ngẫu nhiên khác nhau, có khả năng tốt nhất là tìm optima toàn cục mà không bị mắc kẹt tại optima cục bộ.

Sau năm 2015, do những tiến bộ trong nghiên cứu máy học, He-et-al Initializatio n được giới thiệu để thay thế khởi tạo ngẫu nhiên

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

Các trọng lượng vẫn là ngẫu nhiên nhưng khác nhau về phạm vi tùy thuộc vào kích thước của lớp tế bào thần kinh trước đó.

Tóm lại, trọng số ngẫu nhiên khác 0 giúp chúng ta

  1. Ra khỏi optima cục bộ
  2. Phá vỡ sự đối xứng
  3. Tiếp cận optima toàn cầu trong nhiều lần lặp lại hơn nữa

1

Ngoài việc khởi tạo với các giá trị ngẫu nhiên, trọng số ban đầu không nên bắt đầu với các giá trị lớn. Điều này là do chúng ta thường sử dụng các hàm tanh và sigmoid trong các lớp ẩn và các lớp đầu ra. Nếu bạn nhìn vào đồ thị của hai hàm, sau khi truyền tiến ở lần lặp đầu tiên sẽ dẫn đến các giá trị cao hơn và các giá trị này tương ứng với các vị trí trong hàm sigmoid và tanh hội tụ đạo hàm về 0. Điều này dẫn đến quá trình học bắt đầu lạnh nhạt và tăng thời gian học. Do đó, nếu bạn bắt đầu trọng số một cách ngẫu nhiên, bạn có thể tránh những vấn đề này bằng cách nhân các giá trị này với các giá trị như "0,01" hoặc "0,001".


1

Trước hết, một số thuật toán hội tụ ngay cả khi không có trọng số ban đầu. Một ví dụ đơn giản là Mạng Perceptron Tuyến tính. Tất nhiên, nhiều mạng học tập yêu cầu trọng số ban đầu ngẫu nhiên (mặc dù điều này không đảm bảo cho việc nhận được nhanh nhất và tốt nhất câu trả lời ).

Mạng nơ-ron sử dụng Truyền ngược để tìm hiểu và cập nhật các trọng số, và vấn đề là trong phương pháp này, các trọng số hội tụ về mức tối ưu cục bộ (chi phí / tổn thất tối thiểu cục bộ), không phải tối ưu toàn cục.

Trọng số ngẫu nhiên giúp mạng có cơ hội cho từng hướng trong không gian có sẵn và dần dần cải thiện chúng để đi đến một câu trả lời tốt hơn và không bị giới hạn ở một hướng hoặc câu trả lời.

[Hình ảnh dưới đây cho thấy một ví dụ một chiều về cách hội tụ. Với vị trí ban đầu, tối ưu hóa cục bộ đạt được nhưng không đạt được tối ưu hóa toàn cầu. Ở các kích thước cao hơn, trọng số ngẫu nhiên có thể tăng cơ hội đến đúng nơi hoặc bắt đầu tốt hơn, dẫn đến việc hội tụ các trọng số thành các giá trị tốt hơn.] [1]

[1]: https://i.stack.imgur.com/2dioT.png [Kalhor, A. (2020). Phân loại và Hồi quy NNs. Bài học.]

Trong trường hợp đơn giản nhất, trọng lượng mới như sau:

W_new = W_old + D_loss

Ở đây, gradient hàm chi phí được thêm vào trọng số trước đó để có được trọng số mới. Nếu tất cả các trọng lượng trước đó giống nhau, thì trong bước tiếp theo, tất cả các trọng lượng có thể bằng nhau. Kết quả là, trong trường hợp này, từ quan điểm hình học, mạng nơ-ron nghiêng theo một hướng và tất cả các trọng số đều như nhau. Nhưng nếu các trọng số khác nhau, có thể cập nhật các trọng số theo số lượng khác nhau. (tùy thuộc vào yếu tố tác động mà mỗi trọng số có ảnh hưởng đến kết quả, nó ảnh hưởng đến chi phí và sự cập nhật của các trọng số. Vì vậy, ngay cả một lỗi nhỏ trong trọng số ngẫu nhiên ban đầu cũng có thể được giải quyết).

Đây là một ví dụ rất đơn giản, nhưng nó cho thấy tác động của việc khởi tạo trọng số ngẫu nhiên đối với việc học. Điều này cho phép mạng nơ-ron đi đến các không gian khác nhau thay vì đi về một phía. Kết quả là trong quá trình học, hãy đi đến những không gian tốt nhất


0

Hãy toán học hơn. Trong thực tế, lý do tôi trả lời là tôi thấy câu trả lời này thiếu một chút trong các câu trả lời khác. Giả sử bạn có 2 lớp. Nếu chúng ta xem xét thuật toán lan truyền ngược, việc tính toán

dZ2 = A2 - Y

dW2 = (1 / m) * dZ2 * A2.T

Hãy bỏ qua db2. (Xin lỗi không xin lỗi;))

dZ1 = W2.T * dZ2. * g1 '(Z1)

...

Vấn đề bạn thấy được in đậm. Tính toán dZ1 (được yêu cầu để tính dW1) có W2 trong đó là 0. Chúng tôi không bao giờ có cơ hội thay đổi trọng số thành bất kỳ thứ gì vượt quá 0 và chúng tôi sẽ không bao giờ. Vì vậy, về cơ bản, mạng nơ-ron không học được gì. Tôi nghĩ nó tệ hơn hồi quy logistic (đơn vị). Trong trường hợp hồi quy logistic, bạn học với nhiều lần lặp hơn vì bạn nhận được đầu vào khác nhau nhờ X. Trong trường hợp này, các lớp khác luôn đưa ra cùng một đầu ra nên bạn không học gì cả.


0

Tôi đã học được một điều: nếu bạn khởi tạo trọng số bằng số 0, rõ ràng là các đơn vị kích hoạt trong cùng một lớp sẽ giống nhau, điều đó có nghĩa là chúng sẽ có cùng giá trị. Khi bạn backbrop, bạn sẽ thấy rằng tất cả các hàng của gradient dW cũng giống nhau, do đó tất cả các hàng của ma trận trọng số W đều giống nhau sau khi cập nhật gradient descent. Nói chung, việc khởi tạo tất cả các trọng số bằng 0 dẫn đến việc mạng không phá vỡ tính đối xứng. Điều này có nghĩa là mọi nơ-ron trong mỗi lớp sẽ học cùng một thứ và bạn cũng có thể đang đào tạo một mạng nơ-ron n[l]=1n[l]=1cho mọi lớp và mạng này không mạnh hơn một bộ phân loại tuyến tính chẳng hạn như hồi quy logistic. Andrew Ng khóa học:

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.