深度学习分的3个步骤:第一步定义函数模型,其实就是建立神经网络
对于一个神经网络每个逻辑回归(神经元)的输入输出都可能连接到任何地方,不同的连接就构成了不同的结构,这个结构里就有大量的权重和偏置
我们有各种各样的连接方法,常见的是Fully Connect Feedforward Network全连接前馈神经网络
假设我们的输入和各权重偏置如图,我们就可以得到对应输出
如果我们有下图的连接方式,虽然各w,b都没有确定,但是他的函数集已经确定了
对于全连接前馈网络,我们的输入x有N个特征,这一层叫做输入层,中间Layer1到L-1为隐层,L层为输出层,其中因为每个隐层的神经元输入与上一层所有的输出都连接,且向前传递,因此我们称之为全连接前馈网络。
深度学习的深度通常是指隐层的长度,那多深是深呢,有人认为很多层就是深了,有人认为用了一层隐层也是深度学习,我们没有那么严格划分,且看下图,第一次竞赛中使用深度学习用了8层,错误率16.4%,2015年使用了152层的网络,已经错误率减小到3.57%,这已经接近或者超过了大多数人的识别能力。
我们进行网络参数传递的运算其实就是矩阵运算,以图为例,wx+b可由矩阵乘法和加法获得,然后我们通过函数(激活函数)可计算出结果(这里使用的仍是逻辑回归自带的sigmoid函数,实际我们常常使用ReLu函数)
更为一般性的我们就可以求出整个神经网络的传输函数如下图,因为gpu有矩阵运算的单元,所以我们神经网络梯度下降的时候常常考虑使用gpu加速
我们仔细分析各层的作用,可以发现隐层实际上就是在做特征提取,输出的比较明显的特征分类给输出层的多分类器,使其准确分类,当然多分类器输出层还包括softmax部分,强化概率区别
以手写数字判别为例,图片是16*16的,那输入就是256维的特征向量,每个特征0,1表示该点是否为深色,输出就是个10维向量,每个维度表示这个维度对应数字的概率
我们知道输入输出,但是需要定制隐层的结构,用多少层?每层多少个神经元?这些一般都不是说得准的(突然成了玄学 = =),需要通过经验和直觉来指定,一旦确定了层数和每层神经元数,那我们的网络模型就确定了,所以深度学习并不是把分类变得真正简单,而是把一个问题变成了另一个问题
我们如何优化神经网络呢,以图中识别手写数字为例,我们可以输出一个向量1,0,0,0……此时我们还是使用多分类的交叉熵
我们对每个样本都能求出交叉熵,我们对总样本交叉熵求和,使其最小,方法当然还是梯度下降,来找到神经网络的最优参数
梯度下降示意图如下,我们随机初始参数,根据梯度下降来逐步迭代,即使是AlphaGo也是使用梯度下降来优化
深度学习是越深就越好吗?我们从下图可以看出深度越深的确错误率降低了。
对于一个连续的函数f,我们都可以使用足够多的神经元,在一个隐层实现将其很好的模拟(不过这模型看上去比较宽,难道该叫做Fat learning?),我们为什么采用深度模型呢,待以后分解