好久不见,甚是惦记!小 Mi 最近始终在忙着消化深度学习的各种知识点,这不就快马加鞭地就给大家安顿上啦!明天小 Mi 给大家介绍简略的深度学习网络(Deep Neural Networks,DNN),废话不多说,连忙开始吧~
感知机
首先隆重介绍下神经网络的根底单元——感知机,整体过程就是对若干输出进行加权求和,再加上偏置值,最初通过激活函数失去神经元的输入:
两头输入后果:
最初通过某一种神经元激活函数,如:
该模型的输入后果只能为 1 或 -1,可用于简略二元分类。
DNN 根本构造
在介绍深度学习的过程中其实小 Mi 曾经跟大家介绍过深度学习网络的大抵模型,别离由输出层、暗藏层和输入层,而 DNN 简略来说就是领有很多暗藏层的神经网络。
深度神经网络中层与层是全连贯的关系,即,第 i 层的任意神经元肯定与第 i + 1 层的任意一个神经元相连。
前向流传算法
假如激活函数,下图中的 DNN 前向流传算法公式能够间接求得:
第二层输入:
第三层输入:
最初依据数学归纳法(这个很重要,本文中使用到好几次),能够得出,假如第层有 m 个神经元,则第层的第 j 个神经元的输入为:
这个时候矩阵也能够施展微小的作用啦~ 用矩阵法示意(所有的都能够看成是一个矩阵),第层的输入为:
代码思维
简略来说,前向流传算法就是对若干输出进行加权求和,再加上偏置值,最初通过激活函数,进行线性运算和激活运算,从第一层开始一层层向后计算。
输出: 总层数 L,暗藏层、输入层的对应矩阵 W, 偏倚向量 b,输出向量 x
输入:输入层输入
1)初始化
2)for,计算并输入:
反向流传
之前小 Mi 给大家介绍过机器学习算法,用一个适合的损失函数来度量训练样本的输入损失,接着对这个损失函数进行优化求最小化的极值,大家是不是对这个并不生疏?!对 DNN 的损失函数用梯度降落法进行迭代优化求极小值的过程就是反向流传算法。
在进行 DNN 反向流传算法前,须要抉择一个损失函数,来度量训练样本计算出的输入和实在的训练样本输入之间的损失。
这里选用最常见的均方差来度量损失。即对于每个样本,冀望最小化:
和 y 均为向量,而为 S 的 L2 范数。
那么便能够用梯度降落法迭代求解每一层的 W,b 啦。
输入层第 L 层,输入层的 W,b 满足:
对于输入层的参数,损失函数为:
求解 W,b 的梯度:
符号⊙示意 Hadamard 积,对于两个维度雷同的向量 A 和 B,则 A⊙B=。
先对进行计算:
计算出输入层的梯度,而后一层一层递推,第层的未激活输入梯度能够示意为:
依据前向流传算法,第层的关系能够晓得:
而第层的梯度如下:
接着求出,又一次采纳数学归纳法,假如第层的已知,那么咱们如何求出第层的呢?
可见,当初关键在于求解。
而和的关系其实很容易找出:
这样很容易求出:
将上式带入下面和关系式失去:
失去了的递推关系式,只要求出了某一层的,求解的对应梯度就很简略啦。
代码思路
因为梯度降落法有批量(Batch),小批量(mini-Batch),随机三个变种,这里小 Mi 选用最根本的批量梯度降落法来形容反向流传算法。
输出: 总层数 L,各暗藏层与输入层的神经元个数,激活函数,损失函数,迭代步长,最大迭代次数 MAX 与进行迭代阈值,输出的 m 个训练样本
输入:各暗藏层与输入层的线性关系系数矩阵和偏倚向量
1. 初始化各暗藏层与输入层的线性关系系数矩阵和偏倚向量的值为一个随机值。
2.for iter to 1 to MAX:
1) for i =1 to m:
a) 将 DNN 输出设置为
b) for=2 to L,进行前向流传算法计算
c) 通过损失函数计算输入层的
d) for = L-1 to 2, 进行反向流传算法计算
2) for = 2 to L,更新第层的:
3) 如果所有 W,b 的变动值都小于进行迭代阈值,则跳出迭代循环到步骤 3。
输入各暗藏层与输入层的线性关系系数矩阵 W 和偏倚向量 b。
好啦,明天小 Mi 的解说就到这里啦,次要介绍了深度神经网络的前向流传和反向流传,还是略微有点难度的,不过没难度咱们如何进步呢?下期给大家介绍深度神经网络的正则化!咱们下期再见呦~