特征–中间层(中间节点)–输入
中间层:由神经网络自行计算
图像领域 | 积卷神经网络 | CNN |
---|---|---|
一维序列数据 | 循环神经网络 | RNN |
structured data | unstructured |
---|---|
database of data | audio, image, text |
大规模神经网络+大规模数据=>高预测度
神经网络的兴起
数据量不是特别巨大的时,算法的优劣性,不是很明显,更重要地取决于特征选择
在数据量上升到一定程度地时候,神经网络稳定领先其他算法
相比使用sigmoid,Relv使算法运行更快
学习过程:
直觉选择->校验->迭代->直觉选择
logistic Regression
Given X want :y hat=P(y=1|x)
x∈R^nx 0<=y hat<=1
Parameters:ω∈R^x,b∈R
output y hat=σ(ω^T x+b)
w^T+b==z
lossfunction (单样本
ξ(y hat,y) =-(ylogy hat+(1-y)log(1-y hat))
当y=1 时,y hat 趋于0
当y=0时,y hat趋于1
costfunction
J(ω,b)=m个lossfunction 的均值
当J取极小值,获得最佳的ω,b
使用梯度下降法选择w,b
输入层->隐藏层->输出层
隐藏层的值无法在训练集中查看
输入层为第0层,不作为标准层
中间实现需要向量化
tanh效果优于sigmoid函数
激活函数的平均值更加接近1
使用sigmoid的例外场合是0-1,二分类输出时;
如何不使用非线性激活函数,输出值呈现为单纯的线性组合
=> 还不如直接去掉所有的隐藏层
只有一个地方可以使用线性激活函数
当面对回归问题,y是一个实数时
把权重都初始化为0,所有隐藏单元都是对称的没有一点用,需要让不同的隐藏单元计算不同的函数
用小的随机数初始化权重
a[L] w[L] b[L] n[0]
激活函数 权重 偏置 层
对每层数据堆叠(向量化
在实际应用中使用python的broadcasting会把参数自动复制为高维矩阵
深度学习=超多隐藏层的神经网络
层层递进,由浅入深,由简至繁
深层网络比浅层结构简单(穷举,算力堆叠
Forward and backward function
最优参也会随时间改变
超参数
{α学习率
循环数
隐藏层数
隐藏单元数
activation function
}
decide 参数ω,b
确保验证集和测试集的同一分布 提升计算速度
测试集的目的是对神经网络的系统做出无偏评估
搭建训练验证集和测试集能够加速神经网络的集成
也可以更有效地衡量算法地偏差与方差(与标准误差相等)
train set error | 小 | 大 |
---|---|---|
Dev set error | 大 | 大 |
过拟合,方差大 | 欠拟合,偏差大 |
(随机删除神经网络隐藏单元(节点)简化网络
反向随机失活(inverted dropout)方法通过除以keep-prob确保a3的期望值不变
作用:使得数据扩展问题变少
应用于训练阶段,确保测试阶段结果的唯一
L2正则化对不同权重的衰减是不同的,它取决于倍增的激活函数的大小
dropout的功能类似于正则化,被应用的方式不同,dropout也会有所不同,甚至更适用于不同的输入范围
每一层的keep-prob可以不同,越大的矩阵给予越小的keep-prob来避免过拟合
缺点:为使用交叉验证,要搜索更多的超参数,代价函数不再明确,函数可能不在单调下降
dropout 主要应用于computer vision
early stopping
提早停止训练神经网络再中间点停止迭代
缺点,损失函数的值不够低
正则化的缺点:运算量大,由于参数多且复杂
归一化输入
一、[每个数据-平均值]->零均值化
二、归一化方差,[每个数据/方差平方]->归一化方差
tips: 用相同的u与σ^2来处理训练集和测试集
激活函数指数过大或过小->训练难度变大->梯度下降法步长下降->时间复杂度上升
同样适用于与层数L相关的导数或梯度函数
如果使用Relu激活函数,variance为2/n 效果更加
使得w^ [L] 在
[1 1
0 1]
附近,避免梯度爆炸或梯度消失过快
(其它变体函数)
tanh
xavier初始化
梯度检验测试确保backprop正确实施(中值定理,双边误差)
只用于调试
正则化时,包含正则化项
不与梯度检验同时使用
mini-batch 梯度下降法
一次遍历训练集能有5000次梯度下降,速度快
步长:
1 单次耗时长 batch梯度下降
m 不收敛,效率低下 随机梯度下降
1~m 学习率最快 得到最大向量化 #比多次处理快的多,无需等整个集处理完
vt=βvt-1+(1-β)θt
从计算和内存效率来说,只占一行,节约内存,执行简单,计算成本低,相对普通平均数
指数加权平均的偏差修正,让平均数运算更加准确
vt=vt/(1-β^t),修正t较小时的图像曲线
momentum梯度下降法(消除梯度下降中的摆动
计算梯度的指数加权平均数,并利用该梯度更新你的权重
效果图,折线变平缓了
均方根
RMsprop(root mean square prop) 消除摆动
允许使用一个更大的学习率α,加快算法学习速度
Adam优化算法(将momentum和RMsprop结合在一起)
Adam:adaptive moment estimation
学习率衰减 learning rate decay
前期步伐大,后期需要收敛时,步伐小
局部最优问题
1.不太可能在高维空间中困在局部最优解
2.Adam,momentum,可以快速走出平稳段,加快算法运行
(如何系统地组织超参数调试过程的技巧
随机取点验证超参数效果->局部精细化随机取点
选择合适的进步值
在对数轴随机取值
r=-4*np.random.rand()
α=10 *r
pandas: 一次一模型,边训边调参
caviar: 多模型并行训练,选取最优
batch 归一化使得参数搜索问题变得更容易
对每层的每个输入进行归一化,标准化(隐藏层)
α,β两参数,控制标准化
将batch norm 投入神经网络
tf.nn.batch_normalization 一行代码归一化
在使用batch norm(归一化)时,无论b为多少都会被舍去,所有参数仅为w[L]
通过归一化,标准化减小了隐藏层之间的关系,增强了独立性
类似于dropout增加了噪音,起到了轻微的正则化,避免过拟合的作用
测试时,需要对每个样本逐一处理
u和σ^2的计算通过整个训练集的指数加权平均来获取,然后来测试中的u和σ ^2的调整z值
activation function
将所有可能的输出归一化,输入向量,输出向量
lossfunction of softmax
深度学习框架
TensorFlow
ML策略
1.Fit training set well on cost function
2.Fit dev set well on cost function 正则化调整不干预上层
3.Fit dev test well on cost function
4.perfrom well in real world
1,2正交化:诊断,系统性能瓶颈到底在哪,找到特定的旋钮,调整改善
[调节简单一点]
earlystoping
[不那么正交化,同时影响1,2]
F1score 准确率和召回率的调和平均数
(满足指标,达到阈值即可)
让开发集与测试集同分布
对于有些应用,不需要对系统性能有置信度很高的评估
可仅保留训练集与开发集,无需测试集
开发集作用:选出最优方案(算法……
测试集目的:评估最终成本偏差
根据人类表现得水平错误率==贝叶斯最优错误率
依据可避免偏差(error rate-bayes optimal error)
来判断优先处理 train set 偏差,还是dev set 方差
处理方案: (更大网络再拟合) (正则化)
更好的贝叶斯错误率可更好的估计(可避免偏差和方差),从而选取方案
human-level
train bigger model
train longer/better optimization Adam/ RMsprop /Momentum algorithms
NN architecture/hyperparamters search RNN /CNN
Trainingerror
more data
Regularization L2/dropout/data augmentation
NN architecture/hyperparamters search RNN /CNN
Dev error
找出一组错误的例子,观察
统计属于不同类型的错误数目
找到需要优先解决的问题,或给你构思新优化方向的思路
random errors or near random errors 无影响
system errors 有影响
correction incorrect dev/test set example
1,同步处理开发集与测试集
2,检测正确分类样本标签像检测错误分类一样
3,trainset 与dev/test set 有稍微不同的是没关系的
data|200k from webpages|10k from mobile
200k web+5k mobile to train
2.5k mobile to dev
2.5k mobile to test
human level | train error | train-dev | dev error | 问题 |
---|---|---|---|---|
0% | 1% | 9% | 10% | 方差问题 |
0% | 1% | 1.5% | 10% | 数据不匹配问题 |
0% | 10% | 11% | 12% | 存在偏差问题 |
0% | 10% | 11% | 20% | 偏差和数据不匹配 |
数据不匹配问题(算法擅长处理的数据和你的目标的数据具有不同的分布)
humanlevel , train, train_dev , dev , test
可避免偏差 方差 数据匹配 过拟合
人工合成数据:使得train set 接近test set
(从所有可能性的空间中选取部分数据)
A->B
Task A and B have the same input X
You have a lot more data for task A than task B
low level feature from A could be helpful for learning B
多用于物体检测
1.有相同的lower-level features
2.各目标对应相同的训练数据
3.并能够训练大的神经网络
满足上述条件后相互联系,相互促进效果优于单任务
泛用性远不如迁移学习
传统 | audio | features | phomemes | words | transcript |
---|---|---|---|---|---|
end to end | audio | -> | -> | -> | transcript |
跳开所有步骤,直接样本->标签
————应用前提,数据量足够大
pros:
let the data speak
less hand-designing of components needed
cons:
may need large amount of data
exculdes potentially useful hand-designed components
1.需要大量数据
2.人工设计组件可以给算法直接注入人工经验,加快算法实现
(无需海量数据)