前言
该文的主要原因是深度学习期末开卷考试,因此整理了NN,CNN,RNN,GAN各个网络模型原理和相关知识。
并且对如何设计一个神经网络提出相关讨论,以及神经网络中损失函数,优化算法等也举例,希望能在分析设计题目中有用
最后非常感谢深度学习中许多优秀blog的作者
神经网络NN(Neural Network)
神经网络算法( Neural Network )是机器学习中非常非常重要的算法。它 以人脑中的神经网络为启发,是整个深度学习的核心算法。深度学习就是根据神经网络算法进行的一个延伸。
神经网络的基本结构是:输入层,隐含层,输出层
拿一个最简单的神经网络——逻辑回归,来理解一些神经网络的专业名词
先说一下这个网络能干什么事情,我们输入一个图片,然后经过这个网络,我们就得到了一个概率,这个概率表示输入的图片是某一种东西(比如猫)的可能性。
以上面的图为例,这个网络的运转流程是这样的:
第一部分:输入1,x1,x2,…xm,然后让xi和wi分别相乘,通过计算得到 z = 1 * w0+ x1 * w1+…+xm * wm。w0 可以看做是偏置项,这个时候我们就能拟合一个完整的线性表达了。然后z经过一个激活函数sigmoid得到y,即y = sigmoid(z),激活函数的目的是为了增加函数的非线性表达。损失函数是用来评判预测值和真实值之间的误差的,我们根据定义的损失函数计算出预测值^y和真实值y之间的误差。
完整的第一部分即从输入到损失的计算这一过程就叫做前向传播
第二部分:然后我们根据损失函数和优化算法对权重w进行调整,让网络能够向着我们的目的进行调整,第二个部分的过程叫做反向传播
激活函数
使用激活函数是为了增加函数的非线性表达,如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
使用之后使得神经网络可以任意逼近任何非线性函数。图中的Activation function为sigmoid函数 该激活函数的示意图如下, sigmoid函数将输入的值转换成0~1 之间光滑的数。这样就使得 输出的^y 表示分类的概率 现在也有很多使用tanh激活函数,函数输出为-1~1,比sigmoid收敛更快
损失函数
损失函数是用来评判预测值和真实值之间的误差的,我的理解是损失函数本质上是给这个网络定了一个目标或者一个标准,根据这个标准我们就能评价这个网络好不好。
优化算法
虽然说网络定义了指标(损失函数),但是他只会评价,并不会提供建议,那么这个时候优化函数就粉墨登场了,他是个实干派,他就会让网络向着损失函数最小或者最大(根据情况)的方向调整参数。这样我们的网络就有一个方向了,这样我们最终就能让网络顺着我们的想法移动了。
以梯度下降法为例,说明一个优化算法是怎么训练参数的。对于一个损失函数J(w) ,优化函数的目的是最小化J(w),如下图
我们每次调整w向着让J最小的方向前进,每次走一小步,走了好久好久,最终,我们走到函数的最底部(让J最小)我们就成功了。
每次更新的可以表示为w = w - α* dJ(w)/d(w),dJ(w)/d(w)就是函数J(w)的导数,表示下降的方向 α是步长,每次向着最小值前进的步长。α其实就是所谓的学习率。然后我们根据迭代,一步一步的改变w的值。多次迭代之后我们就能够找到让损失最小的参数w。
卷积神经网络CNN (Convolutional Neural Networks)
卷积网络概述
卷积神经网络是用于提取特征的网络。其操作包含正向传播和反向传播两个过程,正向传播提取特征,反向传播用于传递误差,督促学习过程以确定卷 积参数。
其物理结构包括输入层输出层和多个隐藏层,隐藏层主要包括卷积层、 池化层、全连接层。
卷积层和池化层用于提取特征,他们通过激励函数进行连 接,全连接层用于最后对特征进行提纯,这些层通过神经元相连接。
整体来看:卷积网络结构由输入层、输出层、卷积层、池化层、全连接层构成。
卷积神经网络其实是神经网络的一种拓展,CNN的主要的思想是局部连接(Sparse Connectivity)和权值共享(Shared Weights)
卷积神经网络和普通神经网络区别
卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。
卷积
卷积就是加权求和,黄色的矩形块表示一个卷积核,对图片(绿色区域)的卷积操作如下,卷积核通常可以表示图片的某一种特征(边缘等)
例如以该方式计算卷积
卷积层
在卷积神经网络中,卷积层被多层叠加使用,用于特征提取,生成多层特征图。浅层的特征图中主要包含大量特征信息和少量的语义信息,特征信息包 含形状、颜色图片的边缘、纹理等特征信息,深层特征图中则具有较少的特征信息和丰富的语义信息。卷积层提取特征的过程主要依靠卷积核的操作,卷积 层的每个神经元与前一层对应位置的多个神经元相连接,映射范围由卷积核的尺寸决定。
卷积层由多个特征图组成, 每个特征图由多个神经元组成, 它的每一个神经元通过卷积核与上一层特征面的局部区域相连,卷积核是一个权值矩阵。如下图(左)中的粉嫩的长方体,这个就是一个卷积层,而里面一个矩形就表示特征图,特征图的正面可以看成下图(右),一个特征图包含了多个神经元(用图中的白色圆圈表示,此图为9个)。
卷积层需要定义一些参数:填充(Padding )以及卷积核的步长(Stride),大小(Kernel),和深度
填充:通常是为了让卷积后的图像与原图保持一样,填充为n表示在原图周围加了n层0,
步长:步长为n 表示每做一次卷积,卷积核向下一个方向移动n个像素
卷积核大小:表示神经元感受野大小,如下图(右)定义定义的大小为3*3,
深度:表示有多少种卷积核,每一种卷积核表示一种特征
卷积层之间的计算
一个图像(32 * 32 * 3)作为输入,那么我们需要定义5 * 5 * 3的卷积核,有6个卷积核,这样我们对图像进行卷积操作,卷积操作之后我们输出的卷积层就是 28 * 28 * 6(特征图大小为28 * 28,特征图个数为6个),依次类推
为什么从32到28,因为5-1,如果是3 * 3 * 3的卷积核 就是每次递减3-1
激励函数
在多层的卷积神经网络中,相邻层之间上层神经元将输出信息作为下层神经元的输入信息,信息传递过程中涉及到用来连接的函数关系称作激励函数或激活函数
最常用的激励函数主要为 Sigmoid 函数、Tanh 函数以及修正线性单 元(Rectified Linear Units,ReLU)。
虽然说激励函数一般使用饱和非线性函数如sigmoid函数、tanh函数等.相比较于饱和非性函数,不饱和非线性函数能够解决梯度爆炸/梯度消失问题,同时也能够加快收敛速度。所以现在都是用ReLU函数
池化层
池化层的作用是对卷积层生成特征图的特征信息进行选择和过滤,实际是 一个下采样过程。在特征图尺寸较大时,池化层可以有效的缩小图片尺寸,减小参数量和计算规模,提高运算速度,防止过拟合。
池化层通常用于保留主要的特征,同时减少下一层的参数和计算量 一般来说有最大池化和平均池化,下图为2 *2 最大池化,表示将特征图中的2 * 2区域压缩为一个值,这样能保留主要的特征,并减少下一层的参数。 若使用平均池化,那么就是取区域范围内的平均值,如上图黄色区域,若使用平均池化,则输出的结果是2,并非3
池化层通过预设池化函数, 对特征图的相邻像素进行操作,利用相邻像素的统计信息代替单个像素的信息。 池化操作与卷积操作类似,也有卷积核和步长参数,且使用方法和意义相同。
平均池化函数即将卷积核对应 范围像素取平均值进行映射,代表该范围内的特征,最大池化函数则是将卷积 核对应范围像素取最大值映射至一个像素。池化过程虽然会损失部分特征,但 是也能减少特征提取过程中产生的噪声,提高特征图的鲁棒性。
全连接层
全连接层一般存在于卷积神经网络的底部,用于将前边提取的全部局部特征进行组合,用于后期分类器生成概率参数从而对图像进行分类。
全连接层的每一个神经元都连接着上一层的全部神经元。其操作过程分为两步,首先对所有生成特征图通过一个跟特征图相同大小的卷积核进行点积操作,将原特征图变成一个数,再对第一步中的多个生成结果进行相加求和,进 一步得出整张图的综合结果。全连接层最后得到的是对一张图片特征的高度提纯,生成结果可能包含一个数字或者数组,相当于一个或多个概率参数,被用于分类器分类
全连接层常简称为FC,全连接层FC之后看起来就是普通的NN。连接层实际就是卷积核大小为上层特征图大小的卷积运算,卷积后的结果为一个节点,就对应全连接层的一个点。
假设最后一个卷积层的输出为7×7×512,连接此卷积层的全连接层为1×1×4096,要将这个卷积层转化为全连接层,那么我们需要4096种卷积核,卷积核的大小是7*7,卷积核的深度是512,这样进行卷积操作后输出的1×1×4096 可以看作为后面NN模块的输入。
对于总体网络来说:卷积是用来获取特征的,而NN是用来将获取的特征输入进行决策(分类)的。即卷积作为眼睛,而NN作为大脑。
局部连接
卷积核的大小代表了神经元的感受野,感受野在输入空间中起局部作用,因而能够更好地挖掘出存在于自然图像中强烈的局部空间相关性,这是对图像处理来说非常有效的手段。
如下图左图,是NN的神经元的连接方式,可以看出NN是全局感受野,而右图每一个红色矩形便是对应神经元的感受域,每个神经元只与感受域内的神经元连接,紫色矩形表示CNN卷积层的一个特征图。
权值共享
权值共享简单的来说,对于一个卷积层的N个特征图来说,每一个特征图的卷积核参数是共享的,这大大减少了参数量。下面给出一个例子:
若我们有1000x1000像素的图像,有1百万个隐藏层的神经元,如果全连接,就有1000x1000x1000000=1012个连接,也就是1012个权值参数。。 权值共享就是说如果我们对这一百万个神经元的每一个神经元都连接10x10个元素的图像区域,而且每一个神经元存在10x10=100个连接权值参数都是一样的那么我们就大大减少了参数数量了,从1012变成102。 但是这样我们的每一层神经元均使用同一个卷积核,这样我们只能提取一种特征,因此我们可以增加卷积核的数量,这样我们就能得到多种特征,若有一百种特征,我们最终需要的参数数量也仅仅是10^4。
RNN(Recurrent Neural Network)循环神经网络
RNN介绍
RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。
普通的神经网络只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。
我们从基础的神经网络中知道,神经网络包含输入层、隐层、输出层,通过激活函数控制输出,层与层之间通过权值连接。激活函数是事先确定好的, 那么神经网络模型通过训练“学“到的东西就蕴含在“权值“中。
基础的神经网络只在层与层之间建立了权连接,RNN 最大的不同之处就是 在层之间的神经元之间也建立的权连接。
时间序列数据
时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面的数据跟前面的数据有关系。
RNN结构
首先看一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:
如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。
W是什么:循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。
在标准的RNN结构中,隐层的神经元之间 也是带有权值的。也就是说,随着序列的不断推进,前面的隐层将会影响后面的隐层。
(1)权值共享,图中的 W 全是相同的,U 和 V 也一样。 (2)每一个输入值都只与它本身的那条路线建立权连接,不会和别的神经元连 接。
RNN与其他网络的不同
(1)密集连接网络和卷积神经网络都没有记忆,它们单独处理每个输入,输入 与输入之间没有任何状态。
- 对于这种网络,要想处理数据点的时间序列,需要向网络展示整个序列
- 如 IMDB,需要将所有电影评论转换为一个大向量,然后一次性处理
- 这种网络也叫前馈网络
(2)循环神经网络是有记忆的,它会保存状态,其中包含已处理内容相关的信息。
- RNN 是一类具有内部环的神经网络
- 在处理两个不同的独立序列之间,RNN 的状态会被重置
- 仍可以将一个序列看作是单个数据点
- 真正改变的是,数据点不是在单个步骤中处理,网络内部会对整个序列进行 遍历
GAN(Generative Adversarial Network对抗生成网络)
GAN介绍
生成对抗网络是一类神经网络,通过轮流训练判别器和生成器,令其相互对抗,来从复杂概率分布中采样,例如生成图片、文字、语音等。生成器网络在训 练过程中,生成网络尽量生成真实的图片去欺骗判别器 D。判别器 D 尽量把生 成器 G 生成的图片和真实的图片区分开。G 和 D 构成一个动态的博弈过程。
模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。
原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。
GAN的原理
GAN 的基本网络结构其实非常简单,假设我们有两个网络,G(生成器) 和 D(判别器)。它们的功能分别是:
G 是一个生成图片的网络,它接收一个随机的噪声 z,通过这个噪声生成图片,记做 G(z)。
D 是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x, x 代表一张图片,输出 D(x)代表 x 为真实图片的概率,如果为 1,就代表 100% 是真实的图片,而输出为0,就代表不可能是真实的图片。
在训练过程中,生成器努力地让生成的图像更加真实,而判别器则努力地去识别出图像的真假,这个过程相当与一个二人博弈,随着时间的推移,生成器和判别器在不断地进行对抗。
分析设计思路
神经网络的基本架构设计
- 输入数据
- Load数据到tensor(张量)
- 可视化样本
- 定义网络结构
- 定义损失函数:损失函数定义了样本特征与输出之间正确程度,所有样本损失函数的平均值定义了整个模型的质量。
- 定义优化算法
- 读入batch数据进行训练
- 可视化结果
- 分析结果并调整参数,可能会出现过拟合现象,然后分析过拟合解决方案
网络结构
VGG
小卷积核。作者将卷积核全部替换为3x3(极少用了1x1);
小池化核。相比AlexNet的3x3的池化核,VGG全部为2x2的池化核;
网络使用连续的小卷积核(3×3)做连续卷积,卷积的固定步长为1,并在图像的边缘填充1个像素,这样卷积后保持图像的分辨率不变。
连续的卷积层会接着一个池化层,降低图像的分辨率。空间池化由五个最大池化层进行,这些层在一些卷积层之后(不是所有的卷积层之后都是最大池化)。在2×2像素窗口上进行最大池化,步长为2。
通道数更多,特征度更宽
每个通道代表着一个FeatureMap,更多的通道数表示更丰富的图像特征。VGG网络第一层的通道数为64,后面每层都进行了翻倍,最多到512个通道,通道数的增加,使得更多的信息可以被提取出来。
VGG的输入为224×224×3的图像
卷积层后,接着的是3个全连接层,前两个每个都有4096个通道,第三是输出层输出1000个分类。
所有的隐藏层的激活函数都使用的是ReLU
Alex的CNN结构
- 输入:224×224大小的图片,3通道
- 第一层卷积:11×11大小的卷积核96个,每个GPU上48个。
- 第一层max-pooling:2×2的核。
- 第二层卷积:5×5卷积核256个,每个GPU上128个。
- 第二层max-pooling:2×2的核。
- 第三层卷积:与上一层是全连接,3*3的卷积核384个。分到两个GPU上个192个。
- 第四层卷积:3×3的卷积核384个,两个GPU各192个。该层与上一层连接没有经过pooling层。
- 第五层卷积:3×3的卷积核256个,两个GPU上个128个。
- 第五层max-pooling:2×2的核。
- 第一层全连接:4096维,将第五层max-pooling的输出连接成为一个一维向量,作为该层的输入。
- 第二层全连接:4096维
- Softmax层:输出为1000,输出的每一维都是图片属于该类别的概率。
损失函数
在深度学习中,损失函数扮演着至关重要的角色。通过对最小化损失函数,使模型达到收敛状态,减少模型预测值的误差。因此,不同的损失函数,对模型的影响是重大的。接下来,总结一下,在工作中经常用到的损失函数:
- 图像分类:交叉熵
- 目标检测:Focal loss,L1/L2损失函数,IOU Loss,GIOU ,DIOU,CIOU
- 图像识别:Triplet Loss,Center Loss,Sphereface,Cosface,Arcface
图像分类中
在图像分类中,经常使用softmax+交叉熵作为损失函数
一般来说,分类网络最后一层是用Softmax来输出预测各类别的概率值,KL散度是评价两个概率值的常见手段,交叉熵损失就是脱胎于KL散度,用来评价Softmax输出的概率分布与训练样本真值概率之间的差异性。而且,在优化的角度来讲,交叉熵损失也适合Softmax。
目标检测中
在目标检测中,损失函数一般由两部分组成,classification loss和bounding box regression loss。calssification loss的目的是使类别分类尽可能正确;bounding box regression loss的目的是使预测框尽可能与GT框匹对上。
图像识别中
图像识别问题,包含了行人重识别,人脸识别等问题。此类损失都是通用的
Center Loss:为了提高特征的区分能力,作者提出了center loss损失函数,不仅能缩小类内差异,而且能扩大类间差异。
使用softmax+交叉熵作为损失函数,将其结果可视化出来,如下图所示。可以看出,交叉熵可以使每一类分开,数据分布呈射线形,但却不够区分性,即类内差异大。
优化算法
深层神经网络的参数学习主要通过梯度下降法来寻找一组可以最小化结构风险的参数。在具体实现中,梯度下降法可以分为:批量梯度下降、随机梯度下降和小批量梯度下降三种形式。
优化方法大体上可以分为两类:一是调整学习率,使得优化更稳定;二是调整梯度方向,优化训练速度。常见的优化算法整理如下:
拟合现象
过拟合现象是指在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。
如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。如果模型过拟合了,那么得到的模型几乎不能用。
解决过拟合问题有两个方向:降低参数空间的维度或者降低每个维度上的有效规模(effective size)。降低参数数量的方法包括greedy constructive learning、剪枝和权重共享等。降低每个参数维度的有效规模的方法主要是正则化,如权重衰变(weight decay)和早停法(early stopping)等。
防止过拟合方法主要有:正则化(Regularization),数据增强(Data augmentation),也就是增加训练数据样本,Dropout,early stopping等方法。
Dropout方法
Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征
一般情况,dropout rate 设为0.3-0.5即可
早停法
- 将原始的训练数据集划分成训练集和验证集
- 只在训练集上进行训练,并每个一个周期计算模型在验证集上的误差,例如,每15次epoch(mini batch训练中的一个周期)
- 当模型在验证集上的误差比上一次训练结果差的时候停止训练
- 使用上一次迭代结果中的参数作为模型的最终参数
两层神经网络通俗入门
1.输入层,输出层
连接输入层和隐藏层的是W1和b1。由X计算得到H十分简单,就是矩阵运算:H=X * W1+b1
连接隐藏层和输出层的是W2和b2。同样是通过矩阵运算进行的:Y=H * W2+b2
2.激活层
通过上述两个线性方程的计算,我们就能得到最终的输出Y了,但是一系列线性方程的运算最终都可以用一个线性方程表示。也就是说,上述两个式子联立后可以用一个线性方程表达。对于两次神经网络是这样,就算网络深度加到100层,也依然是这样。这样的话神经网络就失去了意义。所以这里要对网络注入灵魂:激活层。
激活层是为矩阵运算的结果添加非线性的。常用的激活函数有三种,分别是阶跃函数、Sigmoid和ReLU。
激活函数具体是怎么计算的呢?
假如经过公式H=X*W1+b1计算得到的H值为:(1,-2,3,-4,7…),那么经过阶跃函数激活层后就会变为(1,0,1,0,1…),经过ReLU激活层之后会变为(1,0,3,0,7…)。
需要注意的是,每个隐藏层计算(矩阵线性运算)之后,都需要加一层激活层,要不然该层线性计算是没有意义的。
3.输出正规化
输出Y的值可能会是(3,1,0.1,0.5)这样的矩阵,诚然我们可以找到里边的最大值“3”,从而找到对应的分类为I,但是这并不直观。我们想让最终的输出为概率,也就是说可以生成像(90%,5%,2%,3%)这样的结果,这样做不仅可以找到最大概率的分类,而且可以知道各个分类计算的概率值。
简单来说分三步进行:(1)以e为底对所有元素求指数幂;(2)将所有指数幂求和;(3)分别将这些指数幂与该和做商。
这样求出的结果中,所有元素的和一定为1,而每个元素可以代表概率值。
我们将使用这个计算公式做输出结果正规化处理的层叫做“Softmax”层。
4.衡量输出好坏
通过Softmax层之后,我们得到了I,II,III和IV这四个类别分别对应的概率,但是要注意,这是神经网络计算得到的概率值结果,而非真实的情况。
比如,Softmax输出的结果是(90%,5%,3%,2%),真实的结果是(100%,0,0,0)。虽然输出的结果可以正确分类,但是与真实结果之间是有差距的,一个优秀的网络对结果的预测要无限接近于100%,为此,我们需要将Softmax输出结果的好坏程度做一个“量化”。
一种直观的解决方法,是用1减去Softmax输出的概率,比如1-90%=0.1。不过更为常用且巧妙的方法是,求对数的负数。
还是用90%举例,对数的负数就是:-log0.9=0.046
可以想见,概率越接近100%,该计算结果值越接近于0,说明结果越准确,该输出叫做 “交叉熵损失(Cross Entropy Error)”。
我们训练神经网络的目的,就是尽可能地减少这个“交叉熵损失”。
5.反向传播与参数优化
上边的1~4节,讲述了神经网络的正向传播过程。一句话复习一下:神经网络的传播都是形如Y=WX+b的矩阵运算;为了给矩阵运算加入非线性,需要在隐藏层中加入激活层;输出层结果需要经过Softmax层处理为概率值,并通过交叉熵损失来量化当前网络的优劣。
算出交叉熵损失后,就要开始反向传播了。其实反向传播就是一个参数优化的过程,优化对象就是网络中的所有W和b(因为其他所有参数都是确定的)。
神经网络的神奇之处,就在于它可以自动做W和b的优化,在深度学习中,参数的数量有时会上亿,不过其优化的原理和我们这个两层神经网络是一样的。
参数优化的原理和过程:
我们想让球走到最低点
如果增大W1后,球向上走了,那就减小W1。
如果增大b1后,球向下走了,那就继续增大b1。
如果增大W2后,球向下走了一大截,那就多增大些W2。
这个方法叫做梯度下降法
6 迭代
神经网络需要反复迭代。
如上述例子中,第一次计算得到的概率是90%,交叉熵损失值是0.046;将该损失值反向传播,使W1,b1,W2,b2做相应微调;再做第二次运算,此时的概率可能就会提高到92%,相应地,损失值也会下降,然后再反向传播损失值,微调参数W1,b1,W2,b2。依次类推,损失值越来越小,直到我们满意为止。
此时我们就得到了理想的W1,b1,W2,b2。
此时如果将任意一组坐标作为输入,利用图4或图5的流程,就能得到分类结果。
名词解析
反向传播
前向传递输入信号直至输出产生误差,反向传播误差信息更新权重矩阵。
参考文献,由衷感谢!
https://zhuanlan.zhihu.com/p/65472471
https://blog.csdn.net/keeppractice/article/details/108713644
https://zhuanlan.zhihu.com/p/30844905
https://www.cnblogs.com/Luv-GEM/p/10693129.html