deeplearning神经网络基础随笔_吴恩达课程

神经网络基础

    • 神经网络基础
    • 如何实现神经网络
    • 激活函数
    • 随机初始化
    • 深层神经网络符号
    • Forward propagation in a deep network
    • 核对矩阵的维度
    • 搭建深层神经网络
    • 参数与超参数(玄学调参)
    • 训练_开发_测试集
    • 正则化 dropout
    • 数据扩增 data augmentation
    • 加速训练的方法
    • 梯度消失或梯度爆炸
    • 神经网络的权重初始化
    • 梯度的数值逼近
    • Gradient checking(检测偏导误差)
    • 关于梯度检测实现的注记
    • 指数加权平均 Exponentitally weighted averages
    • 调试处理
    • 为超参数选择合适的范围(超参数搜索
    • 超参数训练实践:pandas vs caviar
    • 归一化的网络激活函数
    • Batch Norm as regularization
    • Batch 归一化将数据以mini-batch形式逐一处理
    • softmax回归
    • 单一数字评估指标
    • 满足和优化指标
    • 训练_开发_测试集划分
    • 开发集合测试集的大小
    • 为什么是人的表现
    • 改善你的模型表现
    • 错误分析
    • 清除标记错误的数据
    • 快速搭建第一个系统并快速迭代
    • 在不同划分上进行训练并测试
    • 不匹配数据划分的偏差与方差
    • 解决数据不匹配
    • 迁移学习
    • 多任务学习
    • 端到端的深度学习
    • 是否要使用端对端的深度学习

神经网络基础

特征–中间层(中间节点)–输入
中间层:由神经网络自行计算

图像领域 积卷神经网络 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]
激活函数 权重 偏置 层

Forward propagation in a deep network

对每层数据堆叠(向量化

核对矩阵的维度

在实际应用中使用python的broadcasting会把参数自动复制为高维矩阵

深度学习=超多隐藏层的神经网络
层层递进,由浅入深,由简至繁
深层网络比浅层结构简单(穷举,算力堆叠

搭建深层神经网络

Forward and backward function

参数与超参数(玄学调参)

最优参也会随时间改变
超参数
{α学习率
循环数
隐藏层数
隐藏单元数
activation function
}
decide 参数ω,b

训练_开发_测试集

确保验证集和测试集的同一分布 提升计算速度

测试集的目的是对神经网络的系统做出无偏评估

搭建训练验证集和测试集能够加速神经网络的集成
也可以更有效地衡量算法地偏差与方差(与标准误差相等)

train set error
Dev set error
过拟合,方差大 欠拟合,偏差大

正则化 dropout

(随机删除神经网络隐藏单元(节点)简化网络

反向随机失活(inverted dropout)方法通过除以keep-prob确保a3的期望值不变

作用:使得数据扩展问题变少

应用于训练阶段,确保测试阶段结果的唯一

L2正则化对不同权重的衰减是不同的,它取决于倍增的激活函数的大小
dropout的功能类似于正则化,被应用的方式不同,dropout也会有所不同,甚至更适用于不同的输入范围
每一层的keep-prob可以不同,越大的矩阵给予越小的keep-prob来避免过拟合
缺点:为使用交叉验证,要搜索更多的超参数,代价函数不再明确,函数可能不在单调下降
dropout 主要应用于computer vision

数据扩增 data augmentation

early stopping
提早停止训练神经网络再中间点停止迭代
缺点,损失函数的值不够低

正则化的缺点:运算量大,由于参数多且复杂

加速训练的方法

归一化输入
一、[每个数据-平均值]->零均值化

二、归一化方差,[每个数据/方差平方]->归一化方差

tips: 用相同的u与σ^2来处理训练集和测试集

梯度消失或梯度爆炸

激活函数指数过大或过小->训练难度变大->梯度下降法步长下降->时间复杂度上升

同样适用于与层数L相关的导数或梯度函数

神经网络的权重初始化

如果使用Relu激活函数,variance为2/n 效果更加

使得w^ [L] 在
[1 1
0 1]
附近,避免梯度爆炸或梯度消失过快

(其它变体函数)
tanh
xavier初始化

梯度的数值逼近

梯度检验测试确保backprop正确实施(中值定理,双边误差)

Gradient checking(检测偏导误差)

关于梯度检测实现的注记

只用于调试
正则化时,包含正则化项
不与梯度检验同时使用

mini-batch 梯度下降法
一次遍历训练集能有5000次梯度下降,速度快
步长:
1 单次耗时长 batch梯度下降
m 不收敛,效率低下 随机梯度下降
1~m 学习率最快 得到最大向量化 #比多次处理快的多,无需等整个集处理完

指数加权平均 Exponentitally weighted averages

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 vs caviar

pandas: 一次一模型,边训边调参
caviar: 多模型并行训练,选取最优

归一化的网络激活函数

batch 归一化使得参数搜索问题变得更容易

对每层的每个输入进行归一化,标准化(隐藏层)
α,β两参数,控制标准化

将batch norm 投入神经网络
tf.nn.batch_normalization 一行代码归一化
在使用batch norm(归一化)时,无论b为多少都会被舍去,所有参数仅为w[L]

Batch Norm as regularization

通过归一化,标准化减小了隐藏层之间的关系,增强了独立性
类似于dropout增加了噪音,起到了轻微的正则化,避免过拟合的作用

Batch 归一化将数据以mini-batch形式逐一处理

测试时,需要对每个样本逐一处理
u和σ^2的计算通过整个训练集的指数加权平均来获取,然后来测试中的u和σ ^2的调整z值

softmax回归

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.人工设计组件可以给算法直接注入人工经验,加快算法实现
(无需海量数据)

你可能感兴趣的:(deeplearning,神经网络,python,深度学习)