神经网络和深度学习笔记——01 神经元

神经元模型

感知机(perceptron)

感知机
  • 多个二进制输入经过感知机得到一个二进制输出;
  • 感知机对每个输入赋予权重,表明每个输入的重要程度;
  • 如果输入的加权和大于某个阈值,则输出1,否则输出0;
阈值函数

举个例子,比如说你的镇上要举行奶酪节,你想去参加,但是你需要考虑几个因素:

  • 节日那天天气如何?
  • 你的女朋友陪不陪你去?
  • 坐车过去是否方便?

这里就可以把x1当做天气,天气好则为1,否则为0;x2当做女朋友的陪伴,如果陪你去则为1,否则为0;x3当做交通,方便则为1,否则为0;

假如说你非常喜欢奶酪,即使你女朋友不陪你去,即使步行过去,你都想去;但是天气的原因你需要考虑,天上下刀子,你可不想嗝屁;这时你就可以用这个感知机来模拟你的决策,比如w1设为6,表示你很在意天气的影响;w2和w3设为2,表示你不在乎女朋友的陪伴和交通是否方便。最后假设你选择5作为阈值,这个感知机就实现了你的决策模型。

天气好的时候就会输出1,否则就会输出0,不管女朋友是否陪伴以及交通是否遍历。

通过修改权重和阈值,我们可以得到不同的决策模型;同样的多层感知机网络能够更复杂的决策模型:

多层感知机网络

上面的阈值函数可以这样简化:

  • 使用线性代数里面的点积简化加权和;
  • 将阈值移到不等式左边,用偏置(bias)代替,即偏置为负的阈值;
image.png

偏置表明了感知机有多么容易输出1,用生物学术语就是感知机有多么容易被激活。

感知机的另外一个用途是计算一些基础的逻辑函数,比如与门、或门、与非门。比如下面的感知机:

与非门

输入低电平0和0,产生高电平1,(−2)∗0+(−2)∗0+3=3 是正数,同理10和01产生高电平,11产生低电平。

只要能构建与非门,其他的任何逻辑门就都可以构建,比如使用与非门构建电路实现两个比特x1和x2相加,就相当于做两个事:

  • 求x1和x2的异或值:x1⊕x2
  • 求x1和x2的进位值:x1x2
求和运算

把电路中的每个与非门都用上面的感知机替换,就得到了:

求和感知机

对于上面的网络,最左边的感知机的输出被两次当做最底层的感知机的输入,我们还可以优化:

优化链接

再对输入x1和x2规范化,它们也是输入层的感知机:

输入层正规化

感知机的计算通用性让人喜忧参半,喜的是感知机网络能够像其他计算设备一样提供功能,忧的是它看起来就像一种新型的与非门,并没有什么大的突破。

但是好处在于,我们可以设计出一些学习算法,让感知机网络自动调整权重和偏置,不需要程序员的干预。这些学习算法使我们能够以与传统逻辑门完全不同的方式使用人工神经元。对于复杂的问题,我们并不需要甚至也不可能铺设与非门电路,只需要让网络自己去学习就好了。

Sigmoid 神经元

假设我们现在要实现一个识别手写数字的网络,它能够自动的去调整权重和偏置,以达到最终能够对数字进行分类。要能够达到这样的学习效果,那么它的学习套路应该是:当权重或偏置变化一点点,网络的输出也应该变化一点点。

学习思路

如果真的如我们所想,权重或偏置有一个微小的变化只会导致输出的微小变化,这样我们就可以训练这个网络以达到我们的预期。

比如,我们的网络错误地将图片“9”看成了“8”,我们就可以通过微调权重和偏置,使得网络更接近于将图像分类为“9”。通过反复的微调,最终网络可以正确地学习。

但是问题在于我们想的太好了,感知机的输入和输出都是离散的(0和1),并不是连续的,所以在微调权重和偏置的过程中,总是会让输出跳跃,突然从0到1,或从1到0,没法做到连续变化,而且这个跳动会引起网络其他的部分就白学了。比如说你通过微调,使得网络能够识别“9”,但是原来能识别的其他的数字都识别不了了。所以感知机网络比较笨,学习能力不行。

为了解决这个问题,Sigmoid神经元诞生了,它和感知机差不多,只是稍作优化,我们可以使用同样的方式去画Sigmoid神经元:

Sigmoid神经元

与感知机不同的是,Sigmoid神经元的输入可以是0和1之间的任何数,比如0.638,输出是σ(w⋅x+b),σ代表Sigmoid函数:

image.png

把我们的加权和和偏置带入z,得到真实输出,0-1之间的任意实数:

image.png

看看Sigmoid的函数图像,就可以明白,当输入非常小的时候,输出值接近0,输入非常大的时候,输出值接近1。当输入在0附近的时候,输出呈平滑上升。(注:Sigmoid函数又叫逻辑函数)

Sigmoid function

熟悉步进函数的同学,一眼就能看出,Sigmoid就是步进函数的平滑版本,而步进函数就是感知机的体现,当w⋅x+b大于0,输出1,w⋅x+b小于0,输出0。

image.png

Sigmoid的关键就是它是光滑的,所以从微积分的角度可以获知,权重和偏置的微小该变量,能够对输出产生微小改变:

偏导

上面的偏导公式,表达了一个简单的关系,即△output是△wj和△b的线性函数,由于这个特性使得我们可以通过微调权重和偏置以达到微调输出的效果。

总结一下,到目前为止的Sigmoid说白了就是一个激活函数,激活函数并不只是这一种,对于不同的激活函数,它们的差异就是在求偏导的时候不一样。只不过用Sigmoid的好处在于,指数函数求导更容易些。

思考

  • 假设我们对感知机网络的所有权重和偏置乘以一个正数,c>0,证明:网络的行为没有发生改变;
  • 假设一个感知机网络的每一个感知机都满足w⋅x+b≠0,使用sigmoid神经元取代所有的感知机,然后对所有的权重和偏置乘以一个正数,c>0,证明:1.当c→∞ sigmoid神经网络和感知机网络的效果等同;2.当任意一个感知机w⋅x+b=0的时候,则不等效。

你可能感兴趣的:(神经网络和深度学习笔记——01 神经元)