深度学习的三个步骤
1.define a set of function——该function即神经网络
2.goodness of function
3.pick the best function
神经网络的连接方式不同代表了不同的function
fully connect feedforward network(全连接前馈网络)
输入是一组向量,输出也是一组向量
一个网络如果已经设好了参数,就是一个function
如果仅仅是定义好了这个网络的结构(节点的连接方式),而没有设好参数,就是一个function set
有很多排(列)的神经元,每一排中有很多神经元
第一层的每个神经元会连接到第二层每个神经元上,第一层的神经元的输出会给到第二层上,成为第二层每个神经元的输入,
因为不同层级上的神经元之间两两都有连接,所以叫fully connect;
因为传递的方向是由第一层到第二层,第二层到第三层,所以叫feedforward
整个网络需要一组输入,这组输入是向量
对于第一层每个神经元来说,它的输入值就是输入向量的每一个维度
第L层的神经元的输出就是整个神经元的输出
除输入层,和最后一层输出层外,其余的都叫做隐藏层
deep:有很多隐藏层,所以叫deep learning
权重*输入值+bias,将这个向量输入到sigmoid函数或其他激励函数中求值
整理一下:将第一层所有神经元的权重集合起来形成w1;
bias集合起来形成b1;输入的向量为x;将第一层计算出来的结果记作a1,作为第二层的输入;σ是激励函数(如sigmoid函数)
一层一层计算下去直到算出最终的输出值y
神经网络的计算就是一连串的矩阵计算,可用GPU加速
神经网络在隐藏层做的工作可以看做是在做特征抽取的工作,能取代人工要做的特征工程工作,输入的一组特征经过隐藏层的sigmoid计算转换后,抽出一组特别好的特征,这组好的特征能够被一个简单的多层分类器分类好(即最后一层通过一个softmax function 实现)
手写识别的例子:
输入:手写图片,256*256像素的图片,用一个256*256的向量来表示,1:有墨水,0没有墨水
输出:是1-0这10个数字的可能性,是一个10维的矩阵
这个function set 中包含可以用来识别手写字的函数
网络的结构(network structure)需要好好设计使function set 能够包含好的function,例如需要考虑网络有几层,每层有几个神经元。
定义function的好坏:
计算 通过function计算得出的结果与预期结果之间的交叉熵(cross entropy)
对于所有的训练集中的数据,将所有数据的交叉熵加总,得到一个总的损失(total loss)
在function set中找出一个function使total loss最小
使用gradient descent的方法
可以用反向传播(backpropagation) 来计算微分