深度学习李宏毅PPT学习笔记一(深度学习介绍)
什么是深度学习?DNN就是有多个隐层的NN
机器学习的本质,是学习一个函数,学习一种信息到另一种信息的映射。
这种映射的建立,分为三个步骤:确定模型的结构,训练模型的参数,寻找出最佳参数的模型。然后就可以利用这个模型来进行预测。
在神经网络中,输入向量和权重向量相乘,然后加上偏差,再经过**函数,一般是sigmod
,就得到了一个神经元的输出。
在普通的一次函数中,我们用k和b定义这个函数,而在神经网络中,我们就利用神经网络的架构,例如每一层神经元的数量,每个连接的权重和偏差,来定义这个映射。
全连接前向网络,就是神经元信息的传递,只能从输入层到输出层的方向,且所有元素全部连接。而深度网络,就是指有很多隐层的神经网络。
softmax函数,相当于把所有预测的结果,映射到0-1区间内,变成一种概率分布,概率大小就是置信度confidence,最后输出概率最大的结果作为预测输出。Softmax函数详解与推导 - 理想几岁 - 博客园
https://www.cnblogs.com/zongfa/p/8971213.html
以手写数字的识别为例,最终的神经网络架构如图,输出层有10个神经元,每个神经元输出的是一个概率值。
以识别手写数字为例,训练数据就是图片和他们的标记,学习的目标是,对每一个图片,都应该保证神经网络的输出中,该图片理论正确的神经元输出的概率最大。
建立损失函数,来描述当前模型与期望模型(学习目标)的接近程度。损失函数就相当于神经网络的输出向量,和目标向量的距离。神经网络训练的最终目的,是所有的训练数据产生的损失数值总和最小。基于这个目的,我们去计算所有的参数。
那么如何去计算这么多的参数呢,在这里一般是先随机初始化一系列的权值和参数,然后计算偏导数,利用梯度下降法来估计参数。
实际计算的时候,每个参数随着每一轮的计算,不断进行迭代更新
多个参数更新的结果,就会让我们达到一个局部的最小点
但是局部最小点是不是真正的全局最优呢?并不是,我们人在视野有限但是想去寻找最低点的时候,遵循的就是局部最小的原则。解决这个问题的一个方法就是,选取不同的初始点,然后再寻找,这样可以更大概率上找到全局最下点。
为什么是深度网络,而不是宽度网络?
理论上单隐层的神经网络,可以以任意的精度达到某个函数,但是到底哪一种网络更好呢?我们发现,在深度网络中,随着深度的增加,准确率可以快速降低,而宽度网络中,随着宽度的增加,准确率降低的速度却很慢。
深度网络到底代表了什么?我们类比一个逻辑开关电路就能明白,这实现了更多的模块化分类。
每一层都能利用上一层的分类结果,进行更精细的分类,例如从颜色块,到纹理,然后到图案,最后到物体。
深度学习第一步,使用keras训练mnist手写数字识别模型
使用keras,keras是对TensorFlow或theano的一种高级封装,是一种简单的API接口,keras官网直达:Home - Keras Documentation
这里使用keras跑一个手写识别:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges
第一步,建立分层模型,生成一个500-500-10的模型
第二步,建立模型评价的描述
这里误差使用平均平方误差mean square error,均方差的定义为,可以理解为L2损失:【代价函数】MSE:均方误差(L2 loss) - yuanCruise - ****博客
https://blog.****.net/qiu931110/article/details/82111201
和L1损失mae(mean absolute error)的对比:均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE) - SoWhat1412 - ****博客
https://blog.****.net/qq_31821675/article/details/82025527
第三步,配置训练方法,挑选出最佳的模型
优化方式选择SGD,学习率设置为0.1
模型训练,每个样本的特征维度是784。
训练好了,模型怎么用,使用evaluate
进行评估,得到测试集上的损失和精度,使用predict
方法对测试集进行预测。