从线性回归到神经网络介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作者:
武汉大学遥感信息工程学院硕士研究生王艺程
日期:
2015年10月
邮箱:
wyc@
0.从线性回归到深度学习
0.1. 一元线性回归
•假如有数据(X,Y),想用X预测Y的值,采用一个超简单的预测模型:
wX=Y
在这个给定模型下,总会有一个合适的w值,使得估计值Y与真实值Y尽量接近,怎么得到这个合适的w值呢?
训练样本少时,可以使用协方差矩阵帽子矩阵拉格朗日乘数法最小二乘法balabala…
训练样本很多时,可以介样做:(迭代更新)
∆w=αY−Y X
随机给定初始w值,逐一查看训练样本并更新w值,变化量
也就是每次都微调一点w,使得当前一组样本数据下Y和Y更接近一些。
简单粗暴了点,但,就是算得快!就是有效!
0.2. 多元线性回归
•扩展一下,假如有数据(X 1…X n ,Y ),想用X 1…X n 预测Y 的值,采用这个模型:
b + i=1n
w i X i
= Y
可以采用前面提到的迭代更新法,计算合适的权重取值
∆w i =αY
− Y X i 随机给定初始的b 和n 个w i 值(两两间不相等!),
逐一查看训练样本并更新b 和每个w i 值:
∆b =αY − Y
0.3. 逻辑回归
•线性模型太简单了,还可以来点更复杂的
f b + i=1
n
w i X i = Y
其中f 是一个非线性映射(神经网络中叫做激活函数),常见的有:
Sigmoid 函数Gaussian 函数
ReLU 函数(在真正的逻辑回归中不用,但在神经网络中有用)
注意一点:上述映射本身并不含待定系数,上述映射的导数是映射输入的特别简单的函数模型加入f 的好处:更适合分类问题或逻辑运算问题(我的理解)
引入复杂性,使得多神经元的搭配组合有意义(我的理解)
0.3. 逻辑回归
f b + i=1n
w i X i =f A = Y
中的参数求解,仍采用迭代更新:
∆A =Y − Y df dA
有
∆w i =α∙∆A ∙X i =αY − Y df dA X i ∆b =α·∆A ∙1=αY − Y df
dA 注:为了减少变量定义,做了简化,b 和w i 均为迭代中需要更新的权重变量,所以∆w i 和∆b 的计算公式中有α项。
X i =dA dw i 注意到1=dA
db ∆w i =α∙∆A ·dA
dw i
=αY − Y df dA dA dw i
于是∆b =α·∆A ∙
dA
db =αY − Y
df dA dA db
链式法则?
0.3.逻辑回归
可是Y−Y并不是导数的形式呀,前一页的公式因为它的存在变得不和谐了。。。
强迫症的解决方案:强行让Y−Y等于一个导数形式。
寻找一个自变量为f A的函数,赋予它一个名称——LOSS,使得dLOSS
df A
=Y−Y=Y−f A
事实上,真的存在这样的LOSS函数,并且据我所知,至少有两种不同的基本形式,这里就不列举出来了。
引入LOSS函数的好处:1.让迭代更新公式变得和谐优美,形式统一,方便表述、推导和扩展。
2.LOSS函数值越小,模型拟合效果越好,通过观察迭代中LOSS函数值的变化,判断算法是否收敛。
3.LOSS函数加入正则化项,可以降低过拟合风险。
4.(貌似)可以通过改变权重来实现目标风险最小化。
0.4.人工神经元与随机梯度下降法
可以将一个逻辑回归模型具象成一个神经元
(加权求和—>激发函数)
进一步概括
再回顾总结一下权重估计的迭代更新算法
对w i 和b 赋随机数初始值;For ger=1 to ger_num
For each 单样本in 训练样本数据集%(开始一次迭代)
根据当前b 、w i 和样本数据中的X i 计算神经元的输出f;计算dLOSS/df;
使用链式法则计算w i 的变化量∆w i 即α·dLOSS/dw i ;
(开下脑洞,其实由链式法则也可以计算∆X i 即dLOSS/dX i ,这一点在下一页中用到;)
更新权重值w i ;%(结束一次迭代)End End
上述算法的学名叫做:Mini-batch Stochastic Gradient Descent 其实也可以每次迭代中使用多个训练样本甚至全部训练样本,具体操作简单来说就是“变化量取平均”。实践中,一般每次迭代使用多个训练样本。
0.5. BP人工神经网络
设想两个人工神经元串联的模型: (模型1)
神经元N1神经元N2
输出f N2
在使用随机梯度下降法训练时,如何计算权重值变化量?
输出f N1
对于神经元N2中的权重,按照前面讲的方法计算权重值变化量即可。
对于神经元N1中的权重,先计算dLOSS
df N1
=
dLOSS
dA N2
∙
dA N2
df N1
=∆A N2∙w N2(w
N2
为神经元N2中对应输入f N1的权重),
然后采用链式法则计算神经元N1自身权重值的变化量即可。
可以想象,任意多个人工神经元串联,都可以使用随机梯度下降法训练权重!
(至少在计算上没BUG)