dnn
之前写过线性回归和逻辑回归,但是也有的情况这两种都不能很好的拟合,像这种:
假设我们有非常多的特征,例如大于 100 个变量,我们希望用这 100 个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便只采用两两特征的组合,我们也会有接近 5000 个组合而成的特征,计算起来就非常麻烦了。
这时候就要用到神经网络了,神经网络最重要的功能就是分类了。
神经网络(NN)基本结构
神经网络第一层为input层,最后一层为output层,而在input和output中间的层则被称为hidden层.
DNN模型
x1,x2,x3" role="presentation" style="position: relative;">x1,x2,x3是输入的数据,a1(2),a2(2),a3(2)" role="presentation" style="position: relative;">a(2)1,a(2)2,a(2)3表示第2层的数据,从x1到第二层" role="presentation" style="position: relative;">x1到第二层,需要一个激活函数,这个函数可以是逻辑回归的Sigmoid函数,也可以是其他的函数。一般有以下三种常用的函数:
我们假设这个激活函数为z(x)" role="presentation" style="position: relative;">z(x),我们给它加上一些权重参数w1,w2,w3,w0" role="presentation" style="position: relative;">w1,w2,w3,w0,以及一个x0并且x0=1" role="presentation" style="position: relative;">x0并且x0=1,如下图:
则我们可以知道:
a1(2)=z(w0x0+w1x1+w2x2+w3x3)" role="presentation">a(2)1=z(w0x0+w1x1+w2x2+w3x3)
然后a1(2)" role="presentation" style="position: relative;">a(2)1作为下一层的输入代入激活函数,同样也取一个a0(2)=1" role="presentation" style="position: relative;">a(2)0=1,即:
则:
hθ(x)=z(θ0a0(2)+θ1a1(2)+θ2a2(2)+θ3a3(2))" role="presentation">hθ(x)=z(θ0a(2)0+θ1a(2)1+θ2a(2)2+θ3a(2)3)
注意:每层的激活函数可以不同,但是那样会很麻烦
交叉熵可以用来衡量两个概率分布之间的距离,是分类问题中使用比较光的一种损失函数。对于两个概率分布 p 和 q,表示交叉熵如下:
DNN反向传播
反向传播算法是训练神经网络的核心算法,它可以根据定义好的损失函数优化神经网络的参数值,是神经网络模型的损失函数达到一个较小的值。梯度下降算法是最常用的神经网络优化方法。数学公式有点难打,我就不写推导过程了,这里贴一个链接:推导过程
正则化
神经网络容易发生过拟合现象,而正则化可以防止过拟合,提高泛化能力,常见的正则化方法有以下4种:
1.L2 正则化(权重衰减)
L2正则化就是在代价函数后面再加上一个正则化项:
C=J(θ)+λ2n∑ww2" role="presentation">C=J(θ)+λ2n∑ww2
J(θ)" role="presentation" style="position: relative;">J(θ)代表原始的代价函数,后面那一项就是L2正则化项,它是这样来的:所有参数w的平方的和,除以训练集的样本大小n" role="presentation" style="position: relative;">n。λ" role="presentation" style="position: relative;">λ就是正则项系数,权衡正则项与J(θ)" role="presentation" style="position: relative;">J(θ)项的比重。另外还有一个系数12" role="presentation" style="position: relative;">12,主要是为了后面求导的结果方便。
求偏导:
∂C∂w=∂J(θ)∂w+λnw" role="presentation">∂C∂w=∂J(θ)∂w+λnw
w" role="presentation" style="position: relative;">w的更新为:
w′=(1−αλn)w−α∂J(θ)∂w" role="presentation">w′=(1−αλn)w−α∂J(θ)∂w
其中α" role="presentation" style="position: relative;">α为学习率,显然可以看出L2正则化使得w" role="presentation" style="position: relative;">w减小,而更小的权值w" role="presentation" style="position: relative;">w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好。
2.L1正则化
在原始的代价函数后面加上一个L1正则化项,即:
C=J(θ)+λ2n∑w|w|" role="presentation">C=J(θ)+λ2n∑w|w|
3.Dropout
所谓的Dropout指的是在对训练集中的一批数据进行训练时,随机的从全连接DNN网络中去掉一部分隐藏层的神经元。并用去掉隐藏层的神经元的网络来拟合我们的一批训练数据。然后用这个去掉隐藏层的神经元的网络来进行一轮迭代、更新。当然,dropout并不意味着这些神经元永远的消失了。在下一批数据迭代前,我们会把DNN模型恢复成最初的全连接模型,然后再用随机的方法去掉部分隐藏层的神经元,接着去迭代更新。
如:(之前)
(之后):
4.数据集扩增(data augmentation)
对于我们传统的机器学习分类回归方法,增强数据集还是很难的。你无中生有出一组特征输入,却很难知道对应的特征输出是什么。但是对于DNN擅长的领域,比如图像识别,语音识别等则是有办法的。以图像识别领域为例,对于原始的数据集中的图像,我们可以将原始图像稍微的平移或者旋转一点点,则得到了一个新的图像。而更多的训练数据,意味着可以用更深的网络,训练出更好的模型。
相关阅读
深入浅出数据分析----- 学习笔记
数据分析固定流程
客户帮你确定问题,客户试分析结果的服务对象,可能是上司、执行官、本人。客户将根据你的分析作决策,需
微擎学习笔记2
微擎学习笔记2
參考:https://www.kancloud.cn/donknap/we7/134629
微擎路由:
入口脚本程序获取到到URL中相关的GET参数,解析后进行
区分抑郁和自杀行为,机器学习是怎么做到的?
机器看起来是冰冷的,但也是可以是有温度的。人工智能可以通过情感模型,对一些人类只能感性判断的其他人的情绪和行为,进行精准地判断
集成电路版图学习笔记1----版图基本知识
集成电路设计流程:
Created with Raphaël 2.1.2设 计 方 案定 义 结 构 功能设计与仿真电路设计与仿真版图设计与仿真后
Java学习之一:断点调试
我们在学习Java语言时由于一些语法错误或者个人书写错误导致程序不能正常运行,或者是程序正常运行但得到的运行结果不是理想的结果