用心努力
- 引言
- 神经网络基础
一、引言
1、ML与DL的区别
a) 什么是ML呢?
给定一组数据集,ML等效于寻找一个函数,这个函数可以实现预测识别功能。比如,给定一个波形,识别出“你好”,给定一个手写字体图片识别出“2”,给定星期四多云预测出星期六下雨等等。
模型:假设函数的集合(f1,f2,…) ⇒ 训练:挑选最优函数f* ⇒ 预测:测试集
b) 什么是DL呢?
是寻找一个更复杂的函数,这个函数是由多个函数累积起来的,它的学习过程是一个端对端训练,每一个函数会自主的学习。DL通常所指神经网络类模型。DL尝试找出(多层)特征,并给出结果。
举例,机器学习应用于语音识别:
波形 ⇒ DFT ⇒ 频谱图 ⇒ 滤波 ⇒ log ⇒ DCT(离散余弦变换)⇒ GMM ⇒ Hello
除GMM之外,所有的处理函数都是既定的模型,需要手动出算出结果,只有GMM是从数据中学习。
而深度学习应用于语音识别:
波形 ⇒ f1 ⇒ f2 ⇒ f3 ⇒ f4 ⇒ f5⇒ Hello
所有的处理函数都是从数据中学习的模型,不需要太多的领域知识。机器学习和深度学习应用于图像处理也是这样的区别。
小结:
- 机器学习
- 特征工程:手动的,需要专业知识的
- 模型算法:在特征工程的基础上求解最优参数
- 深度学习
- 特征工程:自发的,模型自主学习得到
- 模型算法:在特征工程的基础上求解最优参数
2、神经网络
a) 单个神经元是怎样的呢?
可以看出,单个神经元模型很简单,就是将一个线性模型,丢到一个sigmoid函数(可供选择)里,得到的模型。
b) 神经网络是怎样的呢?
可以看出,神经网络模型是由许多的单个神经元组成,得到一个预测值至少需要一个神经元,那么要得到一个预测值组成的向量,至少需要该向量维度大小个数的神经元。因此,
神经元是一个复杂的函数 f:RN⇒RM
c) 神经网络中神经元越多,层数越深越好?
不是的,具体采用多少神经元,层数设置多深是深度学习的难点,一般工程上都从经验值出发调试。
3、DL的发展背景
a) DL的历史
1969: Perceptron has limitation
1980s: Multi-layer perceptron
1986: Backpropagation
1989: 1 hidden layer is “good enough”, why deep?
2006: RBM initialization (breakthrough)
2009: GPU
2010: breakthrough in Speech Recognition (Dahl et al., 2010)
2012: breakthrough in ImageNet (Krizhevsky et al. 2012)
2015: “superhuman” results in Image and Speech Recognition
b) 为什么DL能在2010后有重大突破呢?
- 大数据
- GPU
c) 为什么速度特别重要呢?
- 训练时间
- 数据量大
- 训练时间过长不利于工程化
- 预测时间
- 用户没有那么多时间成本等待结果
d) 普遍性定理
任意一个连续函数 f:RN⇒RM ,都可以由一个只有一层hidden layer的神经网络来取代。
e) 肥的复杂还是深的复杂
当然是深的复杂了,因为肥的只是在同一层线性增长 O(2d) ,而深的是叠加增长的 O(d2) 。
e) 怎样运用DL
学习算法可以看作,输入(各种专业领域获取的数据)X到所需结果Y的映射: f:X⇒Y
- Input domain:词汇,语句,声音信号,点击率等等
- 要考虑连续性, temporal, 重要性分布
- Output domain:词性,树结构,概率分布等等
二、神经网络基础
像机器学习的训练过程就涉及到3个问题,
- 模型是怎样的?
- 怎么评估一个好的模型
- 怎么挑选最优模型
那这个基础的讲解大纲也按照这几个问题引出。
1、模型是怎样的?
a) 输入输出
一个分类任务的目标函数可以表示为:一个N维向量到M维向量的映射。
f(x)=yf:RN⇒RM
其中x可以是像素,词语等等,y可以是分类类别,词性等等。
b) 神经网络模型
单个神经元
之前已经学习过了,模型也给出了,由线性模型和一个激励函数组成,并且要注意,一般偏值b也是看作一个特征的。这里思考一个问题,为什么需要偏值b?
输出向量x不能改变,假如增大偏值b,那么线性模型的输出z会增大,通过激励函数后的输出会增大,那么划分为+的概率增大,这就赋予了类别的prior,
y=hw,b(x)=σ(wTx+b)
通过控制