Matlab深度学习工具箱的使用

模型背景

输入x为一个有12维的向量,样本数量假设为1000
输出y 为9个不同的类型
想通过神经网络进行分类

数据导入

输入为12维的,即特征值有12个,样本数量为1000个。
如果使用Mini-Batch的概念,可以将其分为若干个Batch,也就是分成若干个块,这里的训练集分为了270个Batch,每个Batch的大小不一样,第一个Batch为127,第二个为129,但有两个这样大小的Batch。这里可以随意搭配,这样的随机性应该可以对训练结果的正确性有提升(存疑),下图为每个Batch的情况
Matlab深度学习工具箱的使用_第1张图片
可以看到每个Batch的大小和相同类型的Batch都不一样,一共是270个Batch,注意横坐标为输入的维度,也就是特征值。每个Batch所对应的只能是一个类别,比如第一个大小为127的Batch,这里的7个样本都对应一个类别,而不是多个类别,这里实际上对应着的是3,也就是对应第三个类型。当然第二个Batch也可以随意对应着类别,可以是3,也可以是其他的类别,这个根据实际情况进行划分。但尤其要注意的是每一个Batch的12个特征值是对应着一个类别,即是说这里的一列是一个类型,而不是一行,这里每一行对应的是每一个样本中的一个特征值或者说是第一个特征值。其关系如下图所示
Matlab深度学习工具箱的使用_第2张图片
可以看到这里的一个Batch的每个样本的12个特征值是对应着相同的类型。其实这里对应相同的类型也是为了在划分的方便,不然在训练集的类别y值中就无法用一个类别y对应一个Batch。下图为类别y在每个Batch所对应的值
Matlab深度学习工具箱的使用_第3张图片
可以看到这是一个270
1一个categorical类型的,这是和之前的训练集的x的每个Batch相对应的。即第一个Batch对应着类别3,第二个Batch对应着类别3,以此类推就可以列出每个batch所对应的类别了。

网络模型的搭建

模型初步设置了四层,第一层为序列输入层,第二层为全连接层,第三层为softmax层,第四层为分类输出层。
输入层主要是对数据的导入,通过这个模块可以使输入到达全连接层,注意输入的维度,这里的维度应该是特征值的个数,即取12,那么全连接层的输入层也应该是12,应和输入的维度相对应。全连接层的输出为9,和类别y相对应。然后通过softmax层对全连接层的输出进行计算。最后通过输出层进行类别的输出。

深度学习的数学模型

全连接层的作用就是起到一个映射的作用,这里是将维度为12的特征值映射成维度为9的类别,其关系是成线性的。神经网络说到底就是找到这个变换矩阵,即各个权重,最后的权重矩阵是要能够筛选出不同样本的12个特征值所对应的类别y,y是9维的,但只有1个维度的值是最接近1的。
这里将全连接层的输出记作 z i z_i zi,softmax层的输出记作 y i y_i yi
全连接层的数学模型为 z i = ω ∗ x i + b z_i =\omega *x_i +b zi=ωxi+bsoftamx的数学模型为 y i = e z i ∑ i    =    1 9 e z i y_i =\frac{e^{z_i } }{\sum_{i\;=\;1}^9 e^{z_i } } yi=i=19eziezi其中 i i i 1 − 9 1-9 19 y i y_i yi是大于0小于1,并且所有的 y y y相加为1。
深度学习分类的过程分为3个阶段,第一个阶段是先随机取权重,通过线性层(全连接层)进行计算;第二个阶段是对每个连接求导(梯度),第三个阶段是用梯度对权重进行更新。值得注意的是更新权重的时候,可以在梯度的前面乘以一个学习率 α \alpha α,以达到较好的效果。即 ω = ω − α ∗ d l o s s d ω \omega =\omega -\alpha *\frac{\mathrm{dloss}}{d\omega } ω=ωαdωdloss对于两分类的 l o s s loss loss的基本公式为 l o s s = − ( y ∗ l o g y ^ + ( 1 − y ) ∗ l o g ( 1 − y ^ ) ) \mathrm{loss}=-\left(y*\mathrm{log}\hat{y} +\left(1-y\right)*\mathrm{log}\left(1-\hat{y} \right)\right) loss=(ylogy^+(1y)log(1y^))对于两分类的Mini-Batch而言,其 l o s s loss loss l o s s = − 1 N ∑ n = 1 N ( y ∗ l o g y ^ + ( 1 − y ) ∗ l o g ( 1 − y ^ ) ) \mathrm{loss}=-\frac{1}{N}\sum_{n=1}^N \left(y*\mathrm{log}\hat{y} +\left(1-y\right)*\mathrm{log}\left(1-\hat{y} \right)\right) loss=N1n=1N(ylogy^+(1y)log(1y^))其实损失函数 l o s s loss loss可以就看成是 l o s s = − y ∗ l o g ( y ^ ) \mathrm{loss}=-y*\mathrm{log}\left(\hat{y} \right) loss=ylog(y^)因为当 y = 1 y=1 y=1时, 1 − y = 0 1-y=0 1y=0.
其中 y ^ \hat{y} y^为预测值,即上面说提到的 z i z_i zi,N为Batch的个数。

你可能感兴趣的:(深度学习)