吴恩达老师深度学习专项学习笔记
文章目录
- (一)神经网络与深度学习
- 一、概论
- 二、神经网络基础
- 三、浅层神经网络
- 四、深层神经网络
- (二)改善深层神经网络
- 一、深度学习的实用层面
- 二、优化算法:
- 三、超参数调试
- (三)机构化机器学习项目
- 一、ML策略(一)
- 二、ML策略(二)
(一)神经网络与深度学习
一、概论
- 神经网络:
神经元:◯表示非线性函数
神经网络:像乐高积木一样堆叠神经元 - 用神经网络进行监督学习(目前神经网络的落地方向比较成熟)
结构化数据(海量数据, 广告,赚钱)
非结构化数据(图片、语音) - 为什么兴起
数据变多,计算机,算法
二、神经网络基础
符号标记
logistic 回归
回顾之前学习内容:参考线性回归:
h θ ( x ) = g ( θ T x ) s i g m o i d 函 数 : g ( z ) = 1 1 + e − z h_\theta(x)=g(\theta^Tx)\\sigmoid函数:g(z)=\frac{1}{1+e^{-z}} hθ(x)=g(θTx)sigmoid函数:g(z)=1+e−z1逻辑回归可以看作很小的神经网路哦
梯度下降法
w : = w − α d w b : = b − α d b w := w - \alpha dw\\b := b - \alpha db w:=w−αdwb:=b−αdb反向传播:
整体过程(使用两个for循环)
整体过程向量化(利用CPU和GPU的单指令流)
python的broadcasting机制
coding小技巧:reshape()来检验你的矩阵是否正确,有用而且几乎不费运行时间
但是用不好很容易出现bug,一些编程小技巧:
不要使用秩为1的矩阵(5,),因为这种数据结构既不是行向量也不是列向量,转置是一个行向量,所以np.random.randn(5),np.random.rand(5,1)差别很大
如果不确定一个矩阵的大小,使用
assert(a.shape == (5,1))
np.multiply :数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致 np.dot():对于秩为1的数组,执行对应位置相乘,然后再相加; 对于秩不为1的二维数组,执行矩阵乘法运算;超过二维的可以参考numpy库介绍。 星号(*)乘法运算:对数组执行对应位置相乘 对矩阵执行矩阵乘法运算
三、浅层神经网络
网络结构图概览:
神经网络各个参数的表示:
激活函数的选择(自己尝试一下哎,怎么测试好坏呢,交叉验证集???)
sigmoid函数
σ ( z ) = 1 1 + e ( − z ) 导 数 : σ ( z ) ( 1 − σ ( z ) ) \sigma(z) = \frac{1}{1 + e^{(-z)}}\\导数:\sigma(z)(1 - \sigma(z)) σ(z)=1+e(−z)1导数:σ(z)(1−σ(z))tanh函数==(是sigmoid的平移,但几乎在任何场合都比它优越,但在在二元分类输出层还是使用sigmoid,使其结果在0到1)==
t a n h ( z ) = e z − e − z e z + e − z ( 在 − 1 和 1 之 间 取 值 ) 导 数 : 1 − ( t a n h ( z ) ) 2 tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} (在-1和1之间取值)\\导数:1-(tanh(z))^2 tanh(z)=ez+e−zez−e−z(在−1和1之间取值)导数:1−(tanh(z))2relu函数–线性修正单元(解决1 2 的z很大时斜率接近于零问题,它的斜率为0到1)
r e l u ( z ) = m a x { 0 , z } relu(z) = max\{0,z\} relu(z)=max{0,z}leaky relu,很少用(z为负的时候斜率很小但不为0)
为什么要使用激活函数?(引入非线性)
反向传播算法
随机初始化
不能将参数全部初始化为0,原因如下:
同一层的节点将会有相同的值,即隐藏层单元有同样的函数w = np.random.randn(2,2) * 0.01 \\是初始化值过大会使sigmoid函数接近零斜率小,变化慢 b = np.zeros(2,1)
四、深层神经网络
符号标记:
核对矩阵维度:( 自己在纸上写一写)
为什么深度模型更好用
神经网络模块化:
参数和超参数:(保留交叉验证不断尝试)
参数:W,b超参数:学习率,迭代次数,隐藏层数,隐藏单元,激活函数的选择
后面要学的超参数:动量,批处理数,正则化参数
(二)改善深层神经网络
一、深度学习的实用层面
训练,测试,验证集(平时训练,模拟考试,考试)
小数据集:6:2:2
大数据集:100000个样本 98:1:1
测试集和验证集最好有相同的分布
偏差和方差
机器学习基础
偏差和方差的平衡 目前数据量足够网络足够深时可以做到都小
正则化:
一般使用L2正则化(权重衰减矩阵)
为什么使用正则化?
w≈0,奥卡姆剃刀原理,消除一些隐藏单元的影响使网络不至于很复杂
dropout是另一种正则化方法(反向随机失活)一个参数:keep-prob保留节点的概率
- 这样做可以使节点不依赖于任何一个特征,因为这个特征可能会被dropout掉
- 每一层参数不同可以设置不同的keep-prob值,参数多的值设置更小的值
- 超参数少,通常应用于计算机视觉中
- 画损失函数是否梯度下降时关闭Dropout,确保其单调递减后再打开dropout函数
其他的正则化方法:
数据增强:翻转,剪裁已有图片来扩增数据集
早停法:缺点:不能同时减小方差和减小偏差,而L2正则化会有超参数需要调试
输入归一化,减少迭代时间,加速并使数值稳定,主要应用于两特征输入数值相差较大0.1-1,1-10000用就完了不会有伤害
- 最大最小归一化
- 正态分布归一化(一般采用)
- l2归一化(稀疏矩阵)
梯度消失,梯度爆炸
解决方法权重初始化(不能完全解决)梯度检验:
梯度的数值逼近
梯度检验(检查是否反向传播有问题,可以节约很多时间)
注意事项:
- 只在测试的时候使用梯度检验,在训练时不用,会减慢训练速度
- 如果发现有问题,怎么找到问题?追踪到相差比较大的层
- 注意正则化项
- 不能和梯度下降一同使用
二、优化算法:
作用:帮你快速训练模型
mini-batch 梯度下降法(又一超参数)
指数加权平均
计算指数加权平均只占单行数字的存储和内存,效率很高偏差修正:
只在早期有修正效果动量梯度下降法(一般快于标准梯度下降法)
更加平缓: β \beta β的值一般设置为0.9
RMSprop(root mean square prop)允许我们使用一个较大的学习率
Adam==(RMSporp和Momentum的结合)推荐使用==
一般设置参数如下:
α 调 试 β 1 = 0.9 β 2 = 0.999 ε = 1 0 − 8 \alpha 调试\\ \beta1= 0.9\\ \beta2= 0.999\\ \varepsilon = 10^{-8} α调试β1=0.9β2=0.999ε=10−8学习率衰减
- 方法一: α = α 0 1 + d e c a y r a t e ∗ e p o c h n u m \alpha = \frac{\alpha0}{1 + decayrate * epochnum} α=1+decayrate∗epochnumα0
- 方法二: α = 0.9 5 e p o c h n u m ∗ α 0 \alpha = 0.95^{epochnum}*\alpha0 α=0.95epochnum∗α0
- 方法三:离散衰减
- 方法四:手动衰减
局部最优问题(优化算法面临的问题)
三、超参数调试
超参数的重要性排序:红色最重要,接着黄色,接着紫色Adma参数不用调
随机均匀选择点
为超参数选择合适的范围
- 区间两端点在同一量级则均匀随机选择
- 区间两端点在不同量级,则取对数
超参数搜索过程
- 资源少硬件差:在一个模型上尝试
- 硬件强:多个模型参数并行
Batch 归一化
对于逻辑回归:数据归一化为正态分布
对于深度神经网络:对神经网络的隐藏层也要优化
对于输入单元你想让平均值为0方差为1,对于隐藏层单元可以通过设置参数 γ , β \gamma,\beta γ,β得到合适的分布
- 为什么batch norm有用?
- 加快网络训练
- 减少了输入值改变的问题,使这些值变得更稳定,后层网络更独立于前层参数
- 类似于Dropout,有稍微轻微的正则化作用
- 为什么batch norm有用?
softmax回归(完成多分类)
特殊之处:输入一组数,输出一组数,其他激活函数都是输入一个数,输出一个数
怎么训练带有softmax的模型深度学习框架:(只需将正向传播写出,会自动求出反向传播)
tensorflow(会画出计算图)
(三)机构化机器学习项目
一、ML策略(一)
可以调节的参数太多,怎么提高效率
正交化:每调节一个参数,只对一个方面造成影响,不然调节很困难
单数字评估指标:
机器学习,你有一个idea,然后实现它,最后进行评估,评估时要使用一个指标衡量哪个模型好,而不是多个指标
怎么设计这个单评估指标呢?
满足和优化指标:共N个指标,对一个指标进行优化,对于另外N-1个指标只要满足不等式条件(即设置一个门槛)就不考虑它的具体大小。
训练、开发、测试集的划分:
测试集和验证集要有相同的分布
大小比例:
对于test set 的大小,我们有时候不需要对系统有置信度很高的评价,甚至不单独分出测试集也是可以的
改变指标:
对原来的指标评估的模型不满意要重新设计指标
可避免方差:(人类标记误差约等于贝叶斯方差),看出是高bias还是高variance,从而调节参数。
理解人的表现
越接近人类水平越难超过人类的表现:
在超过人的表现时,进展越来越慢
目前,超过人类的方面主要是有结构化数据,计算机视觉等非结构化数据的领域表现有待提高(即自然感知任务)
二、ML策略(二)
误差分析(虽然费时间,但很有必要。要迅速分析哪个方向是有希望的,不要玄学调参)
如果你模型的准确率不高,查看100张你分错的图片分析问题
清楚标记错误的数据
如果数据集很大则基本不需要修正标签,还是进行错误分析,看是否值得
如果值得怎么修改呢?
快速搭建你的机器学习系统,然后不断迭代,不断改进
在不同的划分上训练并测试:
不匹配数据划分的偏差(训练,验证,测试集来自不同的分布)
如果训练集和测试集来自不同的分布,而你训练好的模型在测试集上偏差不大,而在验证集上有较大偏差,则不能放心的说high variance。因为此时有两个变量:- 只见过测试集没见过开发集
- 而开发数据集还来自不同的分布
解决数据不匹配问题
人工分析理解测试,验证,训练集的不同
训练更多相似于验证集和测试集的数据,那数据怎么来呢,可以人工合成数据(加入一些噪音)
合成时注意过拟合问题,因为人类看起来很逼真,但实际不行
迁移学习(深度学习强大的地方可以将一个地方学到的知识应用于另外的地方,但你别期望效果有多好)
应用于:原问题有很多数据,而迁移目标问题的数据量不多
做法:重新训练神经网络的最后一层参数,甚至可以加几层用于训练。
好处:训练更快,数据量需求小
预训练和微调的概念:
例子:图像识别应用于医疗放射科任务
多任务许学习
(并行,试图让单个神经网络同时做几件事,每个任务都能帮助到其他任务,只要你的神经网络足够强大,就不会降低性能)例如:无人驾驶 ,同时要看,有没有行人,有没有车,有没有红绿灯,有没有交通标志,与softmax不同,不是只给图像一个标签,它要在一张图片上同时识别人、车、红绿灯、交通标志。
应用:目标检测
端到端的深度学习(end-to-end deep learning):让数据说话,减少手工组件
最大挑战:需要大量数据
例子:门禁的人脸识别系统:先检测到人脸,放大剪裁人脸图像放到神经网络(没有足够数据时的做法)
- 你设计的可能不好,让算法自己找到更好的表示方法
吴恩达老师深度学习专项学习笔记相关推荐
- 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现
逻辑回归(Logistic Regression)是一个二分分类算法.逻辑回归的目标是最小化其预测与训练数据之间的误差.为了训练逻辑回归模型中的参数w和b,需要定义一个成本函数(cost functi ...
- 论文整理集合 -- 吴恩达老师深度学习课程
吴恩达老师深度学习课程中所提到的论文整理集合!这些论文是深度学习的基本知识,阅读这些论文将更深入理解深度学习. 这些论文基本都可以免费下载到,如果无法免费下载,请留言!可以到coursera中看该视频 ...
- Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2
吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...
- Operations on word vectors-v2 吴恩达老师深度学习课程第五课第二周编程作业1
吴恩达老师深度学习课程第五课(RNN)第二周编程作业1, 包含答案 Operations on word vectors Welcome to your first assignment of thi ...
- 吴恩达老师深度学习,结课了
在2018的最后一天终于学习完了吴恩达老师深度学习课程,2018年真的收获多多,认真学完这个课程就是之一. 对于零基础,想学习深度学习的伙伴,吴恩达老师的网易深度学习微专业适合你,推荐指数4.8. 个 ...
- 吴恩达老师深度学习视频课笔记:总结
吴恩达老师深度学习视频课网址为:https://mooc.study.163.com/smartSpec/detail/1001319001.htm/?utm_source=weibo.com& ...
- 深入理解吴恩达老师深度学习课程(01神经网络和深度学习 第二周)
深入理解吴恩达深度学习(01神经网络和深度学习 第二周) 1引言 2.1 二分类(Binary Classification) 2.1.1 符号定义(视频给出的) 2.2 逻辑回归(Logistic ...
- 吴恩达老师深度学习视频课笔记:序列模型和注意力机制
基础模型:比如你想通过输入一个法语句子来将它翻译成一个英语句子,如下图,seq2seq模型,用x<1>一直到x<5>来表示输入句子的单词,然后我们用y<1>到y&l ...
- 吴恩达老师深度学习视频课笔记:深度卷积网络
Why look at case studies?:过去几年,计算机视觉研究中的大量研究都集中在如何把卷积层.池化层以及全连接层这些基本构件组合起来形成有效的卷积神经网络.找感觉最好的 ...
最新文章
- hive mysql 不兼容_Hive+mySql遇到的问题和解决办法
- 以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题
- python自动生成鸡汤文_20行python代码实现鸡汤智能生成器
- Ubuntu 基本概念之美元号的意义
- 一组匹配中国大陆手机号码的正则表达式
- 重磅!阿里发布全新操作系统,这次要干翻 CentOS 了!
- 华农c语言计算高精度加法_考研计算机 | 运算符与表达式算术运算符
- UVa 10603 Fill (BFS+优先队列)
- python wand安装_安装PythonMagick和pythonmagickwand 步骤
- java只修改变的字段_java注解之运行时修改字段的注解值操作
- 你在 Docker 中跑 MySQL?恭喜你,可以滚了!
- Spark 0.9.1 MLLib 机器学习库简介
- ClassNotFoundException: com.lowagie.text.pdf.PdfGState
- html5网页设计大作业-dw企业网页设计带图片轮播留言 hbuilder大学生网页设计作业成品模板|百岁山矿泉水网页设计
- php下载xlsx到本地,Laravel 5.8 实现Excel 下载(将信息数据导出成Excel下载到本地)...
- python中oct函数_Python中的oct() 函数是什么?
- 眼疲劳症如何自我检测
- linux 64位 虚拟内存空间,Linux在x86-64下的虚拟内存布局
- 中图杯获奖作品计算机组,中图杯大赛试卷
- 《高等数学》 总结 导数、微分、不定积分