*请注意,这一系列文章的骨架来源于Neural Networks and Deep Learning ,本人阅读后对原文进行提炼和加工,重构了整个文笔以让中文的初学者更容易阅读和理解,并首发于CSDN博客上,转载请先联系本人微信986597353,否则一经发现,视为侵权,必将追究法律责任
导航
第一章 面向幼儿园的人工智能
第一篇: 开篇-机器学习
第二篇: 感知器
第三篇: sigmoid神经元
第四篇: 神经网络的结构
第二章 面向小学生的机器学习
正文 sigmoid神经元
在上一章我们已经介绍了基于权重和偏置单元的感知器,但我人为的简单粗暴的对权重和偏置单元的设置进行了干涉。仔细想一下,这其实是不合理的。达尔文告诉我们,人类是从猿类进化来的,而猿类,也经过了非常长久的进化,在进化的过程中,实际上并不是上帝手动的进行了干涉,而是自然选择的结果,是生物基于生存的环境发生的变化。同样,虽然我们没办法设计出大自然如此精妙的系统,但是手动的去调整权重和偏置单元显然是一种非常低效的且未必正确的行为,这时候我们会想设计出一些方法,这些方法可以帮助我们,根据环境(输入值)来自动调整权重和偏置单元。
在未完成学习之前,在阅读本章的时候请先把sigmoid神经元认为是一种特殊的感知器。
但是我们如何才能为我们的神经网络设计一个方法呢?让我们先假设我们的神经网络的输入可能是扫描或者手写的图片数字数原生像素数据,而我们想要神经网络可以去学习自行计算出最优权重和偏置以让神经网络正确地分类数字。为了看出学习是怎么进行的,我们先假设我们对神经网络中的权重或者是偏执单元进行了一些微小的改变。其实我们希望这些对权重和偏执单元的小改变仅仅对输出造成相当微小的变化,因为这个特性将会使得学习变得有可能。至于为什么请往下看。如图,这是我们想要的
如果一个权重或者是偏置单元一个小的变化仅仅会对输出造成小的改变,那么假设这个网络对把图片9错误的分类成了图片8,我们可以计算出如何对权重或者偏置单元做出小的改变以让神经网络更接近于把图片当中做9,然后我们会重复这个事情,让它越来越接近,这样神经网络就在学习了。
然而事实上,对于权重或者偏置单元的一个小变化有时候会造成感知器的输出发生巨大的改变。翻转有时候会造成剩余的神经网络的运行状态以某种复杂的方式发生变化。所以当你的9现在分类正确的时候,神经网络对其他所有图片的行为有可能以某种难以控制的方式完全改变了,这样就会对我们一步步修改权重和偏置单元以至于让神经网络离我们渴望的行为越来越近造成困扰。也就是说,我们希望小改变引起小变化,如果小改变引起剧变,那就会让这个事情脱离我们的控制。
那么为什么小改变有时候会引起巨大的变化呢?这其实也是因为目前我们的神经网络中只有线性因素,线性神经网络在某些非常特殊的情况下可以顺利完成分类。
但如果情况变得复杂了,数据变得线性不可分了,直线就不能很好的分类了。如下图。
想象一下,我们这这张图中对直线移动一小部分,实际上是会造成分类巨大的变化,如果我们要很好的对这些东西分类,实际上我们需要的是一条凹凸不平的曲线,即只对线上的某些点进行改变,而不是每次改变都移动了整条线的轨迹,这就是我说的小改变,小变化。
所以这个时候我们就会发现,我们需要引入一些非线性因素来实现很好的分类。而sigmoid网络,就是来解决这个问题的。
sigmoid 神经元和感知器相似,但是对他们的权重和偏置单元进行修改只会对输出造成非常微小的改变,因为sigmoid是非线性的,请看sigmoid的形状,你就可以非常清晰的明白为什么说它是非线性的:
Sigmoid神经元就像感知器,它拥有输入x1,x2,x3,但是它的输入不仅仅可以是0或者1,而是可以取0到1之间的所有值,比如说0.972就是一个有效的输入值。我们再来看看感知器的函数图像,我们会发现感知器其实就是被平滑成阶梯函数的sigmoid图像,由图我们也可以知道,感知器的输出值只会是0和1:
同样,对于每个输入syimoid神经元都会赋予他们相应的权重w和一个全局的偏置单元b,它的输出我们定义为 σ(w⋅x+b),σ被称为syimoid方法,并且它被这样定义
把所有的东西放在一起的样子是这样的
看起来sigmoid神经元显得和感知器不太相同。如果你不熟悉它的代数形式,它看起来会让人生畏。就像我在一开始说的,这篇文章并不需要深究太多数学上的东西,你只要记住它的图像,是一条曲线,它为感知器带来了非线性因素,这就够了。
为什么我们说sigmoid神经元类似于感知器呢?我们来假设z≡w⋅x+b是一个大的正数,那么,σ(z)≈1,即当z≡w⋅x+b非常大并且是正数的时候,sigmoid神经元的输出会近似于1,就像感知器一样。假设z=w⋅x+b非常小的时候,那么e−z→∞,σ(z)≈0,所以这个时候sigmoid神经元会表现得和感知器相类似。只有当w⋅x+b是一个相对不小不大的时候感知器会产生较大的误差。
σ的非线性表明了在神经网络里,对于权重和偏置单元微小的变化都会对输出造成相应的微小变化。事实上,微积分学告诉我们输出的变化Δoutput会近似于
(∂是偏微分符号,上面的式子可以用中文表述为
输出的变化量 约等于 由于权重j的单独变化而引起的输出的变化率乘以权重j的变化量的累加 加上 偏执单元的单独变化而引起的输出的变化率乘以偏置单元的变化量)。
不要害怕这些复杂的数学符号,实际上他只是说明了一些非常简单的事实。Δoutput是一个关于权重的改变量和偏置单元的改变量的非线性方程。这种非线性使得要通过对权重和偏置单元微小的变化来实现对输出微小变化变得容易。
而sigmoid神经元的输出不仅仅是0和1,而是可以有诸如0.132一样的合法输出,这是非常有用的,比如,如果我们想要使用输出值去表示在神经网络中的一张图片输出的像素的平均强度值(注:图像像素的强度即图片的灰度值,对于RGB颜色空间来说,它是R通道的像素灰度值,G通道的像素灰度值,或者是B通道的像素灰度值,也就是说RGB中包含三个图像强度值。)。
但是有时候这种输出也是一种困扰。假设我们想要从神经网络的输出能够表明输出的图片是一个9还是不是9.显然,这种情况对于感知器来说非常容易处理因为它的输出只有0和1,对于sigmoid神经元则需要判断输出小于0.5或者大于0.5.
特别篇 导数和偏导数
导数其实就是变化率,我们用一个例子来说明。
比如北京今年今年平均房价是10 0000元,我们预测未来三年的房价是11 0000元,12 元0000,13 0000 元,变化率或者增长率是什么?每年增长1万元,所以增长率就是一万元/一年,也就是说,导数是10。写成函数是y = f(t)=t+10 (单位:十万元),注意这里的t代表了年,y代表了房价,函数可以理解为是时间(年)和房价映射关系。
偏导数,比导数多了一个偏字。偏可以理解为偏向某一个变量,那么为什么有多个变量呢?我们都知道房价并非只受到年份的影响,上面的例子只是作为一个买房人的乐观心理给出的函数_(┐「ε:)_,实际上房价并不可能每年都保持这样的增长,它也许受到了人口,经济或者是政治等等的制约,当然仔细探讨下去是非常复杂的问题,但我们在这里可以假设房价受到了时间t,人口p和经济e的影响,在这里偏导数就是对某一个变量求导,比如说对时间t进行求导,对人口p进行求导...我们假设房价的函数方程是y=f(x)=t+10p+5e+10,那么针对时间t求导就是希望知道时间对房价的的增长率贡献有多大,那么要怎么去求得偏导数呢?在求偏导数的时候我们可以把其他变量看成常量,常量的变化率是0,所以导数是0,那么在这里实际上我们就是对t进行求导得出了1,1就是t相对于t的偏导数。
小测试:
1. 假设我们把所有在感知器中的权重和偏置单元乘以一个正整数,c>0,证明神经网络的行为不会发生变化。
答案:
由数学关系可知 c*w*x+c*b≤0 = w*x+b≤0,输出为1的时候同理。
2. 假设我们有和上题一样的设置-一个感知器的网络。同样假设对于它的所有输入都已经选择了。我们不需要一个实际的输入值,我们仅仅需要固定一个输入值。假设权重和偏置单元相对于神经网络任何特定的感知器的x都像这一样w⋅x+b≠0。现在把所有的网络中的感知器替换成sigmoid神经元 ,并且对权重和偏置单元乘以一个正常数c。证明对于常数的极限c→∞,sigmoid 神经元的在神经网络的表现会和感知器一样。当w⋅x+b=0,为什么这种现象在w⋅x+b=0的时候会消失呢?
答:z≡w⋅x+b,乘以正常数和上题同理。只会加剧z变成更大的正数或者负数,对神经网络的判断并无影响,因为该处神经网络的判断的分界线是z=0,当w⋅x+b=0 z恒等于0.5,所以常数c不会对该处神经网络产生影响。
下一篇 神经网络的结构