尝试理解神经网络中的激活函数

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

 


 

以上是关于尝试理解神经网络中的激活函数的主要内容,如果未能解决你的问题,请参考以下文章

从神经网络的不同成本函数和激活函数中进行选择

R中的“神经网络”包,整流线性单元(ReLU)激活函数?

具有神经网络的线性系统中的 sigmoid() 或 tanh() 激活函数

YOLOv5 网络组件与激活函数 代码理解笔记

YOLOv5 网络组件与激活函数 代码理解笔记

常用激活函数(激励函数)理解与总结