注:非原创,用于自我学习
神经网络已经出现很多年,为什么最近广泛应用起来
- 大数据
- 计算机能力的增强
- 普通DL(全连接)
- 1-D序列模型(RNN,LSTM,GPU)
- 图像模型,2-D,3-D, CNN
- 其它类别:无监督学习,增强学习。
- 模型规模不断增大
- 端到端学习 (Rich output)
- 现在大多数机器学习算法只是输出一个值,但深度学习可以干更复杂的事,输出富文本(image->caption, audio->transcript, english->frence, parameters->image)
端到端学习并不能解决所有事情。
拿语音识别举例:
传统方法: audio -> phonemes -> transcript
端到端:audio -> transcript
如果想让端到端学习工作的话,需要大量的标签数据。(X,Y)
另一个例子:通过手的X-ray图像判断小孩的年龄
传统方法:x-ray image -> bones lengths -> age
端到端: image -> age
应用端到端方法,碰到的问题是,没有足够的训练数据去训练一个好的网络。DL用的更多的地方是传统方法的:x-ray image -> bones lengths 这个过程。
?多少数据才够,数据不够的话,小心使用端到端学习
Goal: 人类水平的语音识别系统
定义bias和variance: (偏差和方差)
bias : 训练集错误率 <–> 人类水平错误率
variance: dev-set错误率 <–> train-set错误率
human error |
train-set error |
dev-set error |
test-set error |
问题 |
1% |
5% |
6% |
high bias |
|
1% |
2% |
6% |
high variance |
|
1% |
5% |
10% |
high bias, high variable |
基本workflow:
Bigger Model 和 More Data 总是会得到好结果。
建议:unified data warehouse
问题:当前,用于训练的数据分布,和测试集数据分布很有可能属于不同分布
假设50000h的语音数据(但不是来自测试分布的数据),和10h的语音数据(来自于测试分布)。如何组织你的train, dev, test set?
第一种方案: 将50000h分为train, dev set,10h 作为测试数据(bad idea)
第二种方案:50000h作为train set,10h分为dev,test set。(dev和test set应该服从同一分布)
第三种方案:50000h 分为 train-set, train-dev-set,10h分为 dev-set,test-set 。
重新定义bias variance:
bias : 训练集错误率 <–> 人类水平错误率
variance: train-dev-set错误率 <–> train-set错误率
train-test mismatch: train-dev-set <—> dev-set
overfitting of dev: dev-set <–> test-set
human-level |
train-set |
train-dev-set |
dev-set |
test-set |
问题 |
1% |
10% |
10.1% |
10.1% |
10.2% |
high bias |
1% |
2% |
2.1% |
10% |
train-test mismatch |
基本workflow:
提高模型准确率
如何定义human level error:专家团错误率。
-
当模型准确率低于人类水平时
- 从人类获得更多的数据
- 错误分析(看哪些样本分错了)
- 评估 bias/variance 影响。
1) 人类在一秒中可以干的事情,深度学习可以做(给数据打标签)。
2) 预测序列时间的下一个输出。
3) 人工智能应该干人类无法干的事(马云)
如何学习机器学习
- ML course
- DL schoole
-
Phd student process
- read papers
- replicate results
-
dirty work
- downloading data, clean data
- downloading piece of data, tuning the parameters and see what happend