神经网络总结(三)"/>
Xiang神经网络总结(三)
全连接神经网络
与线性分类器一样,我们仍需牢记如下流程图:
-
像素表示
将原始RGB图像展开为列向量[R1,G1,B1,R2,G2,B2…] -
分类模型
回顾线性分类器
直接线性映射输入与输出。
引入全连接神经网络的目的:解决线性不可分问题,所以输入与输出之间的映射不是线性的
这里max 函数 函数值>0,保留函数值,函数值<0,则函数值为0。
这样即实现了非线性操作。
- 再谈线性与非线性操作中的权值矩阵W
对于线性分类器:
因为线性分类器函数直接映射了输入与输出的关系,以CIFAR10为例输出 f(x,w)为10维列向量,图像矩阵为32323为3072维列向量,则权值矩阵必为103072为,也就是说 W反映了整体样本的平均信息 思考:平均信息就好吗?有利于分类吗? 我们看下图:
由于权值矩阵只能是103072维,所以每一个维度都代表了整体的平均信息,这是定死的,也就是说,两个马头的出现,是因为样本本身有向左的马头和向右的马头!
对于全连接神经网络:
这里f要有10维列向量,所以整个公式对于权值矩阵有要求的只有W2,W2需要10行,列数由max()决定,对于W1没有要求! 这时候W1不仅仅拘泥于像线性分类器一样的10行了!此时W1行数可以更多,—有更多的特征进行分类,有更多的模板,马头向左可以是一个模板,马头向右可以是一个模板!提高了分类性能!
线性可分与线性不可分
可以简单理解,两层全连接网络带拐弯,可以提高分类性能,显而易见。
- 神经网络的简单理解:
w11,w21,w31,w41…权值矩阵
N层全连接神经网络:除输入层之外其他层(隐层(w1x)和输出层)的数量为N的网络。
-
激活函数
讨论完了权值矩阵和输入表示,我们来谈谈Max()函数,即通常所说的激活函数。
常见的激活函数:
sigmoid,tanh缺点:左右两端梯度为0,不利于反向梯度回传
Relu缺点,X<0 没有梯度
记住:我们在训练的时候最讨厌没有梯度了! -
网络结构设计
总体上网络神经元个数越多,网络隐层个数越多则神经网络的分类性能越强,但是对于某样本的分类性能越强并不意味着神经网络在真实应用中性能越好(过拟合 神经网络只记住了能区分样本的一些不具备普适性的特殊特征!)
- 损失函数
SOFTMAX
我们得到的f1,f2,f3希望是每个样本的概率而不是某个像本的分数,所以引入softmax操作:1.对于f取指数。2.对于结果t1进行归一化即可得到概率输出。
交叉熵损失
交叉熵损失要求真实分布为one-hot形式,即真实类别的概率为1。
交叉熵损失比支撑向量机损失好在哪里?
对于第二个样本,多类支撑向量机损失的损失值为0,而交叉熵损失值为0.24。也就是说交叉熵损失不仅仅要求我对于真实类别的预测比对于其他类别的预测分数多1,而且还要能够尽量比其他类别预测分数多得多! 也就是说你别给我搞暧昧,你就预测我的概率最高,而且比其他别人高的高才对。
- 优化算法
计算图
定义:
实际上相当于把一个复杂函数拆分了,逐步表示。
计算图的前向以及反向计算(高数水平,有手就行!)
Eg:
逐步分解,反向求之。链式法则心中记,纵是耶稣也难敌!
可以合并一些单元门,比如在pytorch中可以直接调用sigmoid函数。
- 再谈激活函数
梯度消失问题
不仅仅在左右两端导数值为0,就算在中间导数值也很小,链式法则多级连乘下来也和零没什么区别了,不利于网络的反向流动。
选择 Relu和leakedRelu
梯度爆炸
由于链式法则的连乘,很可能大梯度连乘会使得梯度数值越来越大,难以计算
解决方法:对于梯度进行裁剪
梯度下降算法改进
梯度下降算法存在的问题:
注意我们的W1X是一个多维空间的,我们这里以三位空间为例
到达谷底这个地方,我们需要三个维度的梯度变化,x维,y维,z维,而实际情况是由于步长dertax是固定的,在某些维度的更新很快,即使在这些维度到达的最佳值,但是由于某些维度并没有到达最佳值,就会在到达最佳值的位置进行震荡,仅仅靠加快步长并不能改变这一现象!
动量法
思想:你一个步长可能向左可能向右,但是你多个步长结合起来不就稳定在谷底了嘛,你一个步长可能走的很慢,但是你多个步长累加一下不久加快了吗?
动量法的好处
这里权值的更新依赖的是速度矢量v,当你梯度g为0的时候,依赖历史信息,你的v仍不为0,权值仍能得到更新,所以有可能冲出局部鞍点或者局部最小点!
自适应梯度法
我们通过改变不同方向的学习率,震荡方向学习率小点,平坦方向学习率大点。
当梯度较大时 r的值也很大,g/根号r的值就小了很多,反之,当梯度<1师,g/根号r就大了很多!于是震荡反向学习率得到显著抑制,平坦方向学习率得到显著加强!
ADAM
当t=0时或者很小时,v’=NV当t很大的时候v’=V。
- 训练过程
权值初始化
采用随机初始化,避免反向传播传回来的都一样,那还学个屁,不如去B站学英语!
随机权值初始化的弊端
网络流动问题!当初始值过小时,统计每层输出,结果发现输出值为0了,输入的信息根本传不到后面的输出层,前向计算流都不畅通
当初始值过大时,输出基本都在-1 1,两边。双曲正切梯度。
结论:
由此看来真的很难设置权值初始值。
解决方案:
Xavier初始化
尽量保证输出的分布和输入的分布差不多(输入0均值1方差输出也是),这不就有梯度了嘛?也保证了输出值在可控范围内,梯度在可控范围内!
缺点:
改进 HE初始化
小结:
- 批归一化
你不就是想让输出与输出分布差不多从而便于管控吗,我直接给你目前的输出进行批归一化就行了!
而且批归一化减均值,去方差可以使得小梯度,无梯度的地方被隔绝。
问题
0 1分布未必是最好的最有利于网络分类的分布,那我直接让网络学习就行了!
过拟合与欠拟合
过拟合的本质:网络开始学习仅仅和训练数据有关的那些特征,这些特征可能有利于分类,但是不具有普世意义!
解决方案:
最优方案:本质内容还是分类,那我这个样本直接覆盖了地球上,宇宙里所有关于猫的图片,在真实应用场景中你还能说我分类不好?但是,哪有那么多数据
次优方案:
我让我的模型层数少点,神经元个数小点,分类性能差点,不就学不到那么细致的分类特征了吗,也就减少了过拟合!
约束权重:我通过正则项,来尽量的选择那些权值平均分布的权值向量,也就是说我做分类决策的时候依赖的是多个神经元共同进行决策,而不是依赖某一个神经元进行决策,那过拟合不久减少了么,你说这儿有个猫腿瘸了这个特征有利于分类,我说一个特征不行!我要好几个特征组合的才行!
随机失活(Drop Out)
解释:我告诉网络你啊,我这儿可能随机扔掉一些神经元啊,你给我做决策的时候可千万不要依赖某个神经元,没准儿我就把它扔了!你最好给我做决策的时候多依赖几个神经元,这样,当几个被扔了,你其他的神经元还是能凑乎做决策的!
模型正则与超参数调优
超参数:
学习率,也即Δx,要选择适中的学习率!
超参数优化方法:
搜索策略:
尺度空间:
更多推荐
Xiang神经网络总结(三)
发布评论