Tôi sẽ bắt đầu lập một danh sách ở đây những cái tôi đã học cho đến nay. Như @marcodena đã nói, ưu và nhược điểm là khó khăn hơn vì chủ yếu chỉ là heuristic học được từ việc thử những thứ này, nhưng tôi ít nhất có một danh sách những thứ chúng không thể làm tổn thương.
Đầu tiên, tôi sẽ xác định rõ ràng ký hiệu để không nhầm lẫn:
Ký hiệu
Ký hiệu này là từ cuốn sách của Neilsen .
Mạng thần kinh Feedforward là nhiều lớp tế bào thần kinh được kết nối với nhau. Nó nhận một đầu vào, sau đó đầu vào "nhỏ giọt" qua mạng và mạng nơ ron trả về một vectơ đầu ra.
Chính thức hơn, gọi kích hoạt (còn gọi là đầu ra) của nơron trong lớp , trong đó là phần tử trong vectơ đầu vào. j t h i t h a 1 j j t haijjthitha1jjth
Sau đó, chúng ta có thể liên kết đầu vào của lớp tiếp theo với trước đó thông qua mối quan hệ sau:
aij=σ(∑k(wijk⋅ai−1k)+bij)
Ở đâu
- σ là chức năng kích hoạt,
- k t h ( i - 1 ) t h j t h i t hwijk là trọng lượng từ tế bào thần kinh trong lớp đến tế bào thần kinh trong lớp ,kth(i−1)thjthith
- j t h i t hbij là độ lệch của nơron trong lớp vàjthith
- j t h i t haij đại diện cho giá trị kích hoạt của nơron trong lớp .jthith
Đôi khi chúng ta viết để thể hiện , nói cách khác, giá trị kích hoạt của nơ ron trước khi áp dụng chức năng kích hoạt . ∑ k ( w i j k ⋅ a i - 1 k ) + b i jzij∑k(wijk⋅ai−1k)+bij
Để ký hiệu ngắn gọn hơn chúng ta có thể viết
ai=σ(wi×ai−1+bi)
Để sử dụng công thức này để tính toán đầu ra của mạng feedforward cho một số đầu vào , hãy đặt , sau đó tính , Trong đó là số lớp.a 1 = I a 2 , a 3 , Mạnh , a m mI∈Rna1=Ia2,a3,…,amm
Chức năng kích hoạt
(sau đây, chúng tôi sẽ viết thay vì để dễ đọc)e xexp(x)ex
Danh tính
Còn được gọi là một chức năng kích hoạt tuyến tính.
aij=σ(zij)=zij
Bươc
aij=σ(zij)={01if zij<0if zij>0
Tuyến tính Piecewise
Chọn một số và , đó là "phạm vi" của chúng tôi. Mọi thứ nhỏ hơn phạm vi này sẽ là 0 và mọi thứ lớn hơn phạm vi này sẽ là 1. Mọi thứ khác được nội suy tuyến tính giữa. Chính thức: x tối đaxminxmax
aij=σ(zij)=⎧⎩⎨⎪⎪⎪⎪0mzij+b1if zij<xminif xmin≤zij≤xmaxif zij>xmax
Ở đâu
m=1xmax−xmin
và
b=−mxmin=1−mxmax
Sigmoid
aij=σ(zij)=11+exp(−zij)
Nhật ký bổ sung
aij=σ(zij)=1−exp(−exp(zij))
Lưỡng cực
aij=σ(zij)={−1 1if zij<0if zij>0
Sigmoid lưỡng cực
aij=σ(zij)=1−exp(−zij)1+exp(−zij)
Tanh
aij=σ(zij)=tanh(zij)
LeCun của Tanh
Xem Backprop hiệu quả .
aij=σ(zij)=1.7159tanh(23zij)
Thu nhỏ:
Khó Tanh
aij=σ(zij)=max(−1,min(1,zij))
Tuyệt đối
aij=σ(zij)=∣zij∣
Bộ chỉnh lưu
Còn được gọi là Đơn vị tuyến tính chỉnh lưu (ReLU), Max hoặc Hàm Ramp .
aij=σ(zij)=max(0,zij)
Sửa đổi của ReLU
Đây là một số chức năng kích hoạt mà tôi đã chơi với nó dường như có hiệu suất rất tốt cho MNIST vì những lý do bí ẩn.
aij=σ(zij)=max(0,zij)+cos(zij)
Thu nhỏ:
aij=σ(zij)=max(0,zij)+sin(zij)
Thu nhỏ:
Chỉnh lưu mịn
Còn được gọi là Đơn vị tuyến tính chỉnh lưu mịn, Smooth Max hoặc Soft plus
aij=σ(zij)=log(1+exp(zij))
Đăng nhập
aij=σ(zij)=log(zij(1−zij))
Thu nhỏ:
Probit
aij=σ(zij)=2–√erf−1(2zij−1)
.
Trong đó là Hàm Lỗi . Nó không thể được mô tả thông qua các chức năng cơ bản, nhưng bạn có thể tìm ra các cách xấp xỉ nghịch đảo tại trang Wikipedia và đây .erf
Ngoài ra, nó có thể được thể hiện như là
aij=σ(zij)=ϕ(zij)
.
Trong đó là hàm phân phối tích lũy (CDF). Xem ở đây cho các phương tiện gần đúng này.ϕ
Thu nhỏ:
Cô sin
Xem bồn rửa nhà bếp ngẫu nhiên .
aij=σ(zij)=cos(zij)
.
Softmax
Còn được gọi là số mũ bình thường hóa.
aij=exp(zij)∑kexp(zik)
Cái này hơi lạ vì đầu ra của một nơ-ron đơn lẻ phụ thuộc vào các nơ-ron khác trong lớp đó. Nó cũng khó tính toán, vì có thể là một giá trị rất cao, trong trường hợp đó có thể sẽ tràn. Tương tự, nếu là một giá trị rất thấp, nó sẽ tràn xuống và trở thành .zijexp(zij)zij0
Để chống lại điều này, thay vào đó chúng tôi sẽ tính toán . Điều này cho chúng ta:log(aij)
log(aij)=log⎛⎝⎜exp(zij)∑kexp(zik)⎞⎠⎟
log(aij)=zij−log(∑kexp(zik))
Ở đây chúng ta cần sử dụng thủ thuật log-sum-exp :
Hãy nói rằng chúng tôi đang tính toán:
log(e2+e9+e11+e−7+e−2+e5)
Trước tiên chúng tôi sẽ sắp xếp số mũ của chúng theo độ lớn để thuận tiện:
log(e11+e9+e5+e2+e−2+e−7)
Sau đó, vì là mức cao nhất của chúng tôi, chúng tôi nhân với :e11e−11e−11
log(e−11e−11(e11+e9+e5+e2+e−2+e−7))
log(1e−11(e0+e−2+e−6+e−9+e−13+e−18))
log(e11(e0+e−2+e−6+e−9+e−13+e−18))
log(e11)+log(e0+e−2+e−6+e−9+e−13+e−18)
11+log(e0+e−2+e−6+e−9+e−13+e−18)
Sau đó chúng ta có thể tính biểu thức bên phải và lấy nhật ký của nó. Bạn có thể làm điều này vì số tiền đó rất nhỏ đối với , do đó, bất kỳ dòng nào về 0 sẽ không đủ quan trọng để tạo ra sự khác biệt. Sự cố tràn không thể xảy ra trong biểu thức bên phải vì chúng tôi được đảm bảo rằng sau khi nhân với , tất cả các quyền hạn sẽ là .log(e11)e−11≤0
Chính thức, chúng tôi gọi . Sau đó:m=max(zi1,zi2,zi3,...)
log(∑kexp(zik))=m+log(∑kexp(zik−m))
Chức năng softmax của chúng tôi sau đó trở thành:
aij=exp(log(aij))=exp(zij−m−log(∑kexp(zik−m)))
Cũng như một sidenote, đạo hàm của hàm softmax là:
dσ(zij)dzij=σ′(zij)=σ(zij)(1−σ(zij))
Tối đa
Cái này cũng hơi khó. Về cơ bản, ý tưởng là chúng ta chia mỗi nơ-ron trong lớp cực đại của chúng thành nhiều nơ-ron phụ, mỗi nơ-ron có trọng lượng và thành kiến riêng. Sau đó, đầu vào của một nơ-ron đi đến từng nơ-ron phụ thay vào đó, và mỗi nơ-ron phụ chỉ đơn giản xuất ra các của chúng (mà không áp dụng bất kỳ chức năng kích hoạt nào). Các của tế bào thần kinh có nghĩa là sau đó tối đa của tất cả các kết quả đầu ra của nó phụ neuron của.zaij
Chính thức, trong một tế bào thần kinh, nói rằng chúng ta có tế bào thần kinh phụ. Sau đón
aij=maxk∈[1,n]sijk
Ở đâu
sijk=ai−1∙wijk+bijk
( là sản phẩm chấm )∙
Để giúp chúng tôi suy nghĩ về điều này, hãy xem xét ma trận trọng số cho lớp của mạng thần kinh đang sử dụng, giả sử, chức năng kích hoạt sigmoid. là một ma trận 2D, trong đó mỗi cột là một vectơ cho nơ ron chứa trọng số cho mỗi nơ ron trong lớp trước đó .WiithWiWijji−1
Nếu chúng ta sẽ có các nơ-ron phụ, chúng ta sẽ cần một ma trận trọng lượng 2D cho mỗi nơ-ron, vì mỗi nơ-ron phụ sẽ cần một vectơ chứa trọng lượng cho mỗi nơ-ron ở lớp trước. Điều này có nghĩa là hiện là ma trận trọng lượng 3D, trong đó mỗi là ma trận trọng lượng 2D cho một nơron . Và sau đó là một vectơ cho tế bào thần kinh phụ trong tế bào thần kinh có chứa trọng lượng cho mỗi tế bào thần kinh trong lớp trước .WiWijjWijkkji−1
Tương tự, trong một mạng nơ ron đang sử dụng lại, giả sử, hàm kích hoạt sigmoid, là một vectơ có độ lệch cho mỗi nơ ron trong lớp .bibijji
Để thực hiện điều này với các nơ-ron phụ, chúng ta cần một ma trận thiên vị 2D cho mỗi lớp , trong đó là vectơ có độ lệch cho mỗi subneuron trong tế bào thần kinh.biibijbijkkjth
Có một ma trận trọng số và một vectơ thiên vị cho mỗi nơ-ron sau đó làm cho các biểu thức trên rất rõ ràng, nó chỉ đơn giản áp dụng các trọng số của mỗi nơ-ron phụ cho các đầu ra từ lớp , sau đó áp dụng các thành kiến của họ và lấy tối đa của chúng.wijbijwijkai−1i−1bijk
Mạng chức năng cơ sở xuyên tâm
Mạng chức năng cơ sở xuyên tâm là một sửa đổi của Mạng thần kinh Feedforward, trong đó thay vì sử dụng
aij=σ(∑k(wijk⋅ai−1k)+bij)
chúng ta có một trọng số cho mỗi nút trong lớp trước (như bình thường) và cũng có một vectơ trung bình và một vectơ độ lệch chuẩn cho mỗi nút trong lớp trước.wijkkμijkσijk
Sau đó, chúng tôi gọi hàm kích hoạt của chúng tôi để tránh bị nhầm lẫn với các vectơ độ lệch chuẩn . Bây giờ để tính trước tiên chúng ta cần tính một cho mỗi nút trong lớp trước. Một lựa chọn là sử dụng khoảng cách Euclide:ρσijkaijzijk
zijk=∥(ai−1−μijk∥−−−−−−−−−−−√=∑ℓ(ai−1ℓ−μijkℓ)2−−−−−−−−−−−−−√
Trong đó là phần tử của . Cái này không sử dụng . Ngoài ra, có khoảng cách Mahalanobis, được cho là hoạt động tốt hơn:μijkℓℓthμijkσijk
zijk=(ai−1−μijk)TΣijk(ai−1−μijk)−−−−−−−−−−−−−−−−−−−−−−√
Trong đó là ma trận hiệp phương sai , được định nghĩa là:Σijk
Σijk=diag(σijk)
Nói cách khác, là ma trận đường chéo với là các phần tử đường chéo. Chúng tôi định nghĩa và là các vectơ cột ở đây vì đó là ký hiệu thường được sử dụng.Σijkσijkai−1μijk
Đây thực sự chỉ là nói rằng khoảng cách Mahalanobis được định nghĩa là
zijk=∑ℓ(ai−1ℓ−μijkℓ)2σijkℓ−−−−−−−−−−−−−−⎷
Trong đó là phần tử của . Lưu ý rằng phải luôn dương, nhưng đây là một yêu cầu điển hình cho độ lệch chuẩn nên điều này không gây ngạc nhiên.σijkℓℓthσijkσijkℓ
Nếu muốn, khoảng cách Mahalanobis đủ chung để ma trận hiệp phương sai có thể được định nghĩa là các ma trận khác. Ví dụ: nếu ma trận hiệp phương sai là ma trận danh tính, khoảng cách Mahalanobis của chúng ta giảm xuống khoảng cách Euclide. là khá phổ biến, và được gọi là khoảng cách Euclide bình thường .ΣijkΣijk=diag(σijk)
Dù bằng cách nào, một khi chức năng khoảng cách của chúng ta đã được chọn, chúng ta có thể tính toán thông quaaij
aij=∑kwijkρ(zijk)
Trong các mạng này, họ chọn nhân với trọng số sau khi áp dụng chức năng kích hoạt vì lý do.
Điều này mô tả cách tạo một mạng Chức năng cơ sở xuyên tâm nhiều lớp, tuy nhiên, thường chỉ có một trong số các nơ-ron này và đầu ra của nó là đầu ra của mạng. Nó được vẽ dưới dạng nhiều nơ-ron vì mỗi vectơ trung bình và mỗi vectơ độ lệch chuẩn của một nơ-ron đơn lẻ đó được coi là một "nơ-ron" và sau đó tất cả các đầu ra này có một lớp khác lấy tổng của các giá trị được tính đó nhân với các trọng số, giống như ở trên. Chia nó thành hai lớp với một vectơ "tóm tắt" ở cuối có vẻ kỳ lạ đối với tôi, nhưng đó là những gì họ làm.μijkσijkaij
Cũng xem tại đây .
Chức năng cơ sở xuyên tâm Chức năng kích hoạt mạng
Gaussian
ρ(zijk)=exp(−12(zijk)2)
Đa năng
Chọn một số điểm . Sau đó, chúng tôi tính khoảng cách từ đến :(x,y)(zij,0)(x,y)
ρ(zijk)=(zijk−x)2+y2−−−−−−−−−−−−√
Đây là từ Wikipedia . Nó không bị ràng buộc, và có thể là bất kỳ giá trị tích cực nào, mặc dù tôi tự hỏi liệu có cách nào để bình thường hóa nó.
Khi , giá trị này tương đương với tuyệt đối (với độ dịch chuyển ngang ).y=0x
Nghịch đảo đa năng
Tương tự như bậc hai, ngoại trừ lật:
ρ(zijk)=1(zijk−x)2+y2−−−−−−−−−−−−√
* Đồ họa từ Đồ thị của intmath sử dụng SVG .