参考cs231n与这位的博文https://www.zhihu.com/people/will-55-30/posts?page=1 非常感谢!
之前提到的最简单的线性分类器f=Wx,每个分类对应一个模板有说到朝左朝右的马的问题。如果使用两层的话,如下图,W1计算出了100个分数,这100个里面就会有头朝左的马的分数,头朝右的马等等,然后经过一个非线性操作(max)得到h,再经过W2就会得到马的分数,这样就解决了之前提到的一个类别只对应一个模板的局限性
注意:非线性操作这一步非常重要,没有的话这两个矩阵就可以直接合并了,就没有两层了。
W1,W2是要学习的参数,中间隐层的尺寸是超参数
Wx然后再进行线性操作这个过程与brain的类比
沿轴突传播的信号x,突触强度wi
突触强度是可学习的且可以控制一个神经元对于另一个神经元的影响强度和方向(正向使其兴奋,负方向抑制)
树突将信号传递到细胞体,信号在细胞体中相加,如果最终之和高于某个阈值,那么神经元将会激活。
激活函数表达了轴突上激活信号的频率
cell body中进行的是一些线性操作,activation function f进行的是非线性运算
将激活函数应用在神经元的端部,得到的值作为输出
class Neuron(object):
def forward(inputs):
cell_body_sum=np.sum(inputs*self.weights)+self.bias
firing_rate=1.0/(1.0+math.exp(-cell_body_sum))
return firing_rate
激活函数
sigmoid:
1.平坦区域的饱和使梯度消失
2.输出不是零中心的,这会导致在神经网络后面层中的神经元得到的数据不是零中心的,这会影响梯度下降的运作。
其中Relu是和神经元工作原理最相近的
Relu的优点
相较于sigmoid和tanh,Relu对于随机梯度下降的收敛有巨大的加速作用
计算方便
缺点:
easily die 神经元无法再被激活 特别是学习率设置太高的时候
(die的现象太严重时也可以选择leaky Relu或Maxout)
网友评论