深度学习:原理简明教程03-神经网络基础
欢迎转载,作者:Ling,注明出处:深度学习:原理简明教程03-神经网络基础
神经网络分浅层神经网络与深度学习网络,但是都属于神经网络这个大类别。我们首先会通过一些例子,引入神经网络的各种概念:神经网络基本组成,前向传播,反向传播,BP算法
引入:
可以从感知机说起,关于感知机可以参考:机器学习:原理简明教程02-感知机
感知机通过寻找:到误分类点cost最小的分割平面的办法,得到最优分割平面,求得w和b
接下来你会发现,其实和神经网络求w和b很类似,实际上单层感知机是最简单的一种神经网络。
实例:房价预测
如下图,一条Relu分割线,假设其可以很好地拟合房屋大小和房价的关系,它其实也是一种最简单的神经网络
换一种画法:这种画法更像神经网络,和上面其实等价
你可以看到神经网络:
组成:神经元,输入x,输出y,链接线
功能:输入x,通过神经元处理(就是你要训练得到的拟合分割线),得到输出y,也就是预测的房价
为啥叫神经网络:因为很像人大脑中的神经网络,所以这种机器学习方法也称神经网络
更复杂的例子:房价可能由多个指标(俗称特征)决定
如下图所示:
输入:房屋大小,房间数目,地区代码,当地财富情况
虽然是由这四个特征决定,但是其中某些特征可能决定了一些隐含特征,从而最终决定的房价
隐含层:房屋大小和房屋数目决定家庭大小,地区代码决定出行难易,当地财富决定学校质量
输出层:最终决定了最后价格
将该图抽象:标准神经网络结构
如图:
输入:x1,x2,x3,x4
隐含层:一层隐含层,节点数3个
输出层与输出结果:y
以上就是最简单的神经网络
下面我们再结合一个具体例子来看,神经网络如何通过学习参数,得到模型,处理图片二分类:
如图:
输入:
图片转换成特征向量:
每个像素点都是一个数,三个channel,展开成一维向量:
共64*64*3=12288个特征
n=nx=12288
形式化约定:
模型:
结构:就经过一个逻辑回归
如果不清楚没关系,我这里再介绍一下主要内容,方便和后面内容衔接
逻辑回归:sigmod
整个简单的神经网络就是输入x,然后经过w,b处理,然后再经过一个sigmod,如果大于0.5则认为结果为1,小于0.5认为结果为0,得到了y^,这样就就可以进行二分类。
如果我们任意给定一组w和b,我们总可以得到y^是0,或者1,这样应该如何调整w和b,使得其得到的y^接近真实的y呢?
即如果给定很多(x,y)实例,如何得到w和b?
任何一个机器学习算法都需要确定一个Objective函数,或者说cost函数。
cost函数准则:如果预测结果和真实结果越接近,cost越小,预测结果和真实结果越不同,cost越大,以此衡量你得到w和b的好坏,从而最终得到w和b。
如何选择cost函数呢?
最小二乘法 vs log法
它们都可以反应cost函数准则:
1)最小二乘法,如果y^和y相差大,cost越大
2)log法:如果y=1,其实只有前面式子,如果y^为0,cost越大,y^为1,cost为0,如果y=0,其实只有后面式子,如果y^为0,cost为0,如果y^接近1,cost很大
由于log更好计算,且是凸函数,选择后者。
有了cost函数,我们就可以改变w和b,然后看改变w和b,会导致cost变大还是变小,我们目标是让cost变小。
如何让cost变小?
通过梯度下降法可以迭代求得比较优的w和b,使得cost比较小。
为什么通过梯度下降法可以求得比较优的w和b?
解释:对于下凸函数,我们的log函数就是下凸函数,沿梯度方向,更改w和b,可以让cost不断减小,当到达低谷时候,就是最优解了。
画出J cost和w与b关系图,我们知道,沿红线不断走,调整w和b值,可以降低J,到达低谷可以让cost最小
什么是梯度方向?
解释:实际上就是导数或者偏导数,也就是红线方向。
图中是两个变量,我们看一个变量的例子:
最优J在底谷,我们只要反复让w减去学习率乘以梯度,就可以让J达到底谷。
为啥梯度可以有这种效果?
对于J=3w,其中3你可以认为是输入值,固定为3,我们要变动w(要学的参数),看看对J这个cost产生多少影响
梯度为3:
原来w=1,y=3
w变化0.001,即w=1.001,y要变化0.003,y=3.003
对于J=3w2
梯度为6w
如果w=1,y=3
w变化0.001,即w=1.001,在w=1处,y要变化0.006, y=3.006003
三点结论:
1)梯度可能在每个不同w处,结果不一样
2)梯度大小决定了,w变化多少影响y变化多少
3)梯度方向可以让w的变化,最大影响y变化
对应到神经网络参数优化问题:我们知道y和y^有误差,我们要可以调整w来减小这个误差,所以可以通过梯度*α改变来调整,这就是为什么通过梯度下降,让cost变小的原因。
一个简单的神经网络,通过梯度下降可以改变w和b值,从而让J(cost)更小,从而学得最后的w和b,之后输入一个x,就可以通过w和b得到预测的y,这就是神经网络!!!
下面更加形式化地说明什么是神经网络:
计算图:
公式
隐含变量:
画成图:
如图所示:J或者说cost最后的计算,是通过abc组合以及中间一些组合最后得到,这就是计算图。
神经网络其实就是类似一个计算图。
前向计算:通过计算图可以进行前向传播,forward计算结果
反向计算:可以通过反向计算各个偏导值(之后讲反向传播会用到),链式偏导
通过计算图,我们可以正向求cost,反向计算梯度,有了这个武器,我们来看看它如何处理逻辑回归对应的神经网络。
逻辑回归对应的神经网络:
公式:
网络:
图中w1,w2,b都是参数,模型要学习的
x1,x2是输入的一个实例的两个特征
通过前向:我们可以得到L,cost值
通过反向:我们可以求每个参数的梯度,通过梯度下降法,是的L变小,求得最优参数值
每个参数梯度求法:
通过梯度下降,求得最优参数值:
前面是针对一个实例的两个特征,现在应用多个实例:
公式:
梯度计算:
BP算法:
其中dz是预测值和标准值差,所以叫误差反向传播算法。
好了,计算参数的方法讲完了,下面看看如何提高效率。在早期的机器学习软件中,比如weka,都是通过for循环计算每个特征相应的值,这样计算太慢,如果利用向量,同时计算所有特征值,更新所有参数,速度可以大大提高,很多很多倍….向量化,可以去掉for循环。
上面其实有两个for循环,我们通过向量去掉:
最后向量版本的算法:
留言