迭代循环
了解机器学习开发的迭代循环能帮助我们明白我们当前所处的阶段
第一步是系统的总体架构是什么
这意味着我们此时要选择好机器学习模型、决定使用什么数据、选择超参数等等
第二步是训练模型
这个过程可能会进行很长时间
第三步是进行诊断调整
查看算法的方差、偏差以及错误分析等,根据训练的结果来做出下一步的决定
如是否要扩大神经网络、更改正则化参数、添加减少功能等选择
通过以上三个步骤多次循环迭代,直到获得想要的性能
在训练模型时我们总是希望获得更多的数据,但是尝试获取更多所有类型的数据可能即慢又昂贵
所有最好是添加那些有助于分析表明更有助于帮助的类型的数据
迁移学习
个人大白话理解:
先通过学习一些 有某些特征的任务 形成神经网络,目的是得到各层的参数
将先前得到的参数转移到新的神经网络,使得新的神经网络有一个更好的条件(参数)去完成任务
类似于站在巨人的肩膀上继续研究
以下是课程中的例子
当我们没有足够的数据时,也可以使用迁移学习来让不同任务的数据来帮助我们的程序
假设我们现在的任务是用机器学习来识别手写的0~9,但是我们没有足够的手写数据
我们现在手头上有一个包含一千个不同类别的大数据集,里面包含有一百万张猫、狗、汽车、人等照片
我们可以先用这个数据集训练神经网络
训练算法将输入的图像作为X,并学会输出为这一千类的其中一个
在这个过程中我们最终会得到神经网络不同层数中的参数
当我们应用于迁移学习时,我们要做的是复制这个神经网络
将其参数复制给新的神经网络,但要注意的是这个新的神经网络(本例中)只有四层
并且最后的输出只有10个输出单元(本例中)而不是1000个输出单元
这10个输出单元对应识别数字0~9
在迁移学习中我们可以使用除最终输出层之外的所有层作为参数的起点,然后运行优化算法
因为第五层无法复制过来,所以我们要提出新的参数,对于这个参数我们要从头开始训练
训练的方法有两种
第一种 只训练输出层参数
可以将w1、b1到w4、b4作为顶部的值,并固定他们然后使用随机梯度下降或Adam等算法仅仅更新w5、b5来降低学习识别数字的成本函数
第二种 训练所有层的参数
使用迁移时的参数作为初始参数 ,进行初始化,然后更新
小总结:如果是一个比较小的训练集,通常第一种方案会更好,如果训练集稍大,第二种更好
迁移学习一般用于CV和NLP中,一些图片和文本通常都有相似的特征
迁移学习的好处是自己不用成为那个进行监督预训练的人,网上已经有人做好这个
只要拿来用即可,将网上训练好的输出层替换为自己的输出层
然后在执行两种训练算法的其中一个,只需做一些微调就能快速得到一个表现比较良好的神经网络
不过也别跨度太大,比如下载了个图像神经网络,结果你的任务是音频神经网络