尝试理解神经网络中的激活函数
Posted pylblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试理解神经网络中的激活函数相关的知识,希望对你有一定的参考价值。
激活函数引用:https://www.cnblogs.com/ms-uap/p/9962978.html
首先,单个神经元是长这样的:
也就是,当A=σ(Z)=Z时,不使用激活函数的话,那么,单个神经网络,输出只能是A = ΣWX + b
1. 从训练数据来理解。(参考:https://blog.csdn.net/weixin_38275649/article/details/80340538)
假如我们的神经网络,仅仅是一个单细胞的神经元
联想我们的样本,例如在做图片识别的时候,通常来说,训练数据:
x1,x2,x3,是某动物的概率。(例如:有毛发:1,有獠牙:1,毛色R:255,毛色G:109,毛色B:100,是豹子的概率:0.75)
显然,如果拿A=σ(Z) = sigmoid(Z) = 0.75,看起来就很合适了(当然,强行的Z=0.75好像也没什么问题,且看第2点)
2. 从非线性组合的角度来理解。(参考:https://zhuanlan.zhihu.com/p/27661298)
在测绘中,通常我们拟合曲面的时候,有如下样本数据:
x,y,z
目标是,知道范围内的x,y,获得z。
先说一下通常的做法(我认为这是建模与神经网络训练十分重要的区别):
首先,我们假定它有一个模型:Z = w0 + w1 * x + w2 * y + w3 * x * y + w4 * x2 + w5 * y2 + w6 * x 2* y + w7 * y2 * x + w8 * x3 + w9* y3 + ……(一般就w0~w9到此为止了)
假定,(w0~w9),其初始值为(w‘0~w‘9),也就是:(0.1,……0.1)
假如我们使用高斯牛顿迭代法来求解,我们不直接解w0~w9,令wi = w‘i +dwi,我们要解的是dwi ,也就是初始值的改正值:
原函数变为:Z = (w‘0 + dw0) + (w‘1+dw1) * x + (w‘2 + dw2) * y + (w‘3 + dw3 ) * x * y + ……;
也就是:Z = Z ‘ + dw0 + dw1 * x + dw2 * y + w3 * x * y + ……;
也就是:AW = (Z - Z‘)= b
W = [dw0,……dw9]T
而A的每一行,根据各个样本,有An = [1,x,y,xy,x2,y2 ……]
解AW=b
根据最小二乘原理,解AW=b。
ATAW=ATb
W = (ATA)-1ATb,解得W = [dw0,……dw9]T
将解的结果,代回w‘‘i = w‘i +dwi , (w‘‘0~w‘‘9)作为新的初始值,继续迭代解
直到:上次迭代的(Z - Z‘)2 和本次迭代的 (Z - Z‘)2 相差无几。
***如有需要以离区域中心加权,可以引入权矩阵: W = (ATPA)-1ATPb,P通常是对角阵,意思是Z与Z之间高程是独立观测量,也就是说Zi ≠ f(Zj)。
***P对角上的数值可以为 di / ∑ d,d是离中心的距离 ; 在测绘上,可以表示为 1 / (Z测量误差)2
***权值,代表我们对这个样本的关注程度,样本误差越小,权值越大。
在曲面不太复杂,且有一定的规律的时候,这种方法通常效果很理想。因为其考虑了XY之间的非线性因素。
如果以“单细胞神元” , 且激活函数A=σ(Z)=Z时,我们顶多可以 Z = WX + b , W = [w1,w2] , X = [x,y]T
这样完全只是一个空间平面而已。(w1* x + w2* y - z + b = 0)
进而,我们考虑:
A=σ(Z) = sigmoid(Z) ,参考https://zhuanlan.zhihu.com/p/27661298
sigmoid 泰勒展开部分,可以解决函数仅仅为线性函数的问题。但是:
sigmoid函数的值,只能是0~1之间,显然,我们要的Z值,肯定不是这样的(Z是根据地形,数值可能是2.xxx ,3.xxxx各种)
那么,能解决这个问题,只能是多层神经网络:https://www.cnblogs.com/ms-uap/p/10031484.html
以上是关于尝试理解神经网络中的激活函数的主要内容,如果未能解决你的问题,请参考以下文章