《Structuring Machine Learning Projects》课堂笔记
Lesson 3 Structuring Machine Learning Projects
这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第三门课程的课程笔记。
参考了其他人的笔记继续归纳的。
迁移学习 (Transfer learning)
深度学习中,最强大的理念之一就是,有的时候神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中。
假如说我们已经训练好一个图像识别神经网络,如猫狗识别器之类的,然后我们让它适应或者说迁移到放射科诊断,类似 X 射线扫描图这种任务。需要做的是,把神经网络最后的输出层删掉以及进入到最后一层的权重删掉,然后为最后一层重新赋予随机权重,让它在放射诊断数据上训练。

经验规则是,如果有一个小数据集,就只训练输出层前的最后一层或两层;但是如果有很多数据,那么也许可以重新训练网络中的所有参数。如果重新训练所有参数的话,在图像识别数据上的初期训练阶段,被称为预训练 (pre-training);而在放射诊断数据上训练的过程,被称为微调 (fine tuning)。
为什么迁移学习会有效果呢?有很多低层次特征,比如说边缘检测、曲线检测、阳性对象检测 (positive objects),从非常大的图形识别数据库中习得这些能力可能有助于我们的学习算法在放射诊断中做得更好。算法学到了很多结构信息,图像形状信息,其中一些知识可能会很有用。
多任务学习 (Multi-task learning)
在迁移学习中,步骤是串行的,从任务 A 里学习只是然后迁移到任务 B。在多任务学习中,任务是同时开始学习的,试图让单个神经网络同时做几件事情,然后希望每个任务都能帮到其他所有任务。
以下面这个例子来说明。
假设我们在研发无人驾驶车辆,那么需要同时检测不同的物体,比如行人、车辆、停车标志以及交通灯等。

上图中输入的图像是 \(x^{(i)}\),对应的标签 \(y^{(i)}\) 不再是一个数值,而是一个向量。假设,现在我们就检测 4 个类别,那么 \(y^{(i)}\) 就是一个 \(4\times1\) 的向量。那么现在我们训练一个神经网络,输入 \(x\),输出是一个四维向量 \(\hat{y}\)。

对于这个神经网络的代价函数如下
\[
J(W^{[1]},b^{[1]},\dots)=\frac{1}{m}\sum^m_{i=1}\sum^4_{j=1}L(\hat{y}_j^{(i)},y_j^{(i)})
\]
其中 \(\sum^4_{j=1}L(\hat{y}_j^{(i)},y_j^{(i)})\) 是单个样本的损失函数,也就是对四个分量的求和。
\[
L(\hat y_{j}^{(i)},y_{j}^{(i)}) = - y_{j}^{(i)}\log\hat y_{j}^{(i)} - (1 - y_{j}^{(i)})log(1 - \hat y_{j}^{(i)})
\]
如果训练的一组任务可以共用低层次特征时,多任务学习可以提供一种有效的方式。
References
[2] 深度学习 500 问
《Structuring Machine Learning Projects》课堂笔记的更多相关文章
- 《Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization》课堂笔记
Lesson 2 Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization 这篇文章其 ...
- Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Initialization)
声明:所有内容来自coursera,作为个人学习笔记记录在这里. Initialization Welcome to the first assignment of "Improving D ...
- [C4] Andrew Ng - Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
About this Course This course will teach you the "magic" of getting deep learning to work ...
- Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Assignment(Optimization Methods)
声明:所有内容来自coursera,作为个人学习笔记记录在这里. 请不要ctrl+c/ctrl+v作业. Optimization Methods Until now, you've always u ...
- Coursera, Deep Learning 2, Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Course
Train/Dev/Test set Bias/Variance Regularization 有下面一些regularization的方法. L2 regularation drop out da ...
- 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第三周(Hyperparameter tuning, Batch Normalization and Programming Frameworks) —— 2.Programming assignments
Tensorflow Welcome to the Tensorflow Tutorial! In this notebook you will learn all the basics of Ten ...
- 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第二周(Optimization algorithms) —— 2.Programming assignments:Optimization
Optimization Welcome to the optimization's programming assignment of the hyper-parameters tuning spe ...
- Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Gradient Checking)
声明:所有内容来自coursera,作为个人学习笔记记录在这里. Gradient Checking Welcome to the final assignment for this week! In ...
- 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第一周(Practical aspects of Deep Learning) —— 4.Programming assignments:Gradient Checking
Gradient Checking Welcome to this week's third programming assignment! You will be implementing grad ...
- Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week3, Hyperparameter tuning, Batch Normalization and Programming Frameworks
Tuning process 下图中的需要tune的parameter的先后顺序, 红色>黄色>紫色,其他基本不会tune. 先讲到怎么选hyperparameter, 需要随机选取(sa ...
随机推荐
- NLP/CL 顶会收录
全文转载自知乎@刘知远老师:初学者如何查阅自然语言处理学术资料(2016修订版). 1. 国际学术组织.学术会议与学术论文 自然语言处理(natural language processing,NLP ...
- mysql下优化表和修复表命令(repair table、optimize table)
随着mysql的长期使用,肯定会出现一些问题,一般情况下mysql表无法访问,就可以修复表了,优化时减少磁盘占用空间,方便备份. repair table table_name //修复表 optim ...
- 基础简单DP
状态比较容易表示,转移方程比较好想,问题比较基本常见 递推.背包.LIS(最长递增序列),LCS(最长公共子序列) HDU 2048 数塔 由上往下推 状态数太多(100!) 可以由下往上推: d ...
- libusb 3.0
1)usb3.0 在windows使用winusb时,出现ReadFile的input buffer 太大时,读不到数据问题? 2)linux下,usb 3.0 libusb_claim_interf ...
- 洛谷P3690 Link Cut Tree (动态树)
干脆整个LCT模板吧. 缺个链上修改和子树操作,链上修改的话join(u,v)然后把v splay到树根再打个标记就好. 至于子树操作...以后有空的话再学(咕咕咕警告) #include<bi ...
- 安装tensorflow遇到:Your CPU supports instructions that this TensorFlow binary was not compiled to use
为了提升CPU计算速度的.若你有支持cuda的GPU,则可以忽略这个问题,因为安装SSE4.1, SSE4.2, AVX, AVX2, FMA, 仅仅提升CPU的运算速度(大概有3倍). 解决方法: ...
- 【SQL Server】使用SQL比较版本号
最近遇到这么一个场景,需要用SQL从表里取出版本号小于'10.2'的所有数据.目前表中以存在的数据中,版本号有两种格式,一个是'X.Y',另一个是'X'.对于SQL Server来说,其没有strin ...
- 【Python之路】特别篇--Git & GitHub
版本控制工具主要实现2个功能: 版本管理 在开发中,这是刚需,必须允许可以很容易对产品的版本进行任意回滚,版本控制工具实现这个功能的原理简单来讲,就是你每修改一次代码,它就帮你做一次快照 协作开发 一 ...
- Js模块化开发--seajs和gruntJs
1.Seajs库 解决开发中的冲突依赖等问题,提供代码可维护性. SeaJS 是由玉伯开发的一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块和css ...
- CF1216E Numerical Sequence
题目链接 问题分析 奇奇怪怪的题... 首先思路达成一致,从大到小一步一步确定位置. 我们一边分析,一边讲算法. 1121231234123451234561234567123456781234567 ...