深度学习与神经网络
目录
决策过程
神经元的基本结构
单个神经元解决的问题有限,多个神经元互相连接能否解决更复杂的问题。
经过换算,多个神经元连接起来的结构依然可以使用单个神经元表示。
激活函数
为了能让多个神经元连接解决更复杂的问题,需要引入激活函数。
激活函数需要为非线性函数,其作用是让神经元拥有非线性输出能力。(不再是简单的输出)
对应到空间坐标系中,经过激活函数的转换,原来的平面变成了曲面。(解决更复杂的问题)
三种常见的激活函数
加入了激活函数的神经元代码如下,即在输出前增加一次非线性函数计算。
增加了激活函数的神经网络,在二维平面中,可以绘制出复杂的非线性图案。
神经网络
多个神经元按层划分,首尾相连组成了最简单的全连接神经网络。
神经网络可分为输入层、隐藏层、输出层三个主要层。
输入层===》负责接受输入参数,不做运算。
隐藏层===》包含一层或多层,是主要的运算层。
输出层===》负责整个神经网络的输出。
在实际过程中,对每一层做不同激活函数指令。
并不能直接使用初始化的神经网络模型做预测,因为其中的参数是随机的,预测出来的结果也是不准确的。
训练神经网络的过程就是调整其中神经元参数的过程。
损失函数
要训练一个神经网络,首先需要定义差距,损失函数即定义预测值与实际值之间差距的函数。
当所有样本的损失平均值最小时,就认为函数的拟合是最好的,即找到了最佳权重。
对于其中一个样本,都可以得到w、b在三维空间中的函数图像,z取值越小,误差越小。
C点对应的误差在0左右,C点是最优的。
任意损失函数绘制出的图像(不一定是三维),我们的目的是找到最低点,其对应的自变量坐标,就是权重的最优取值。
训练神经网络的过程转换为寻找函数图像最低点的过程。
除了损失函数平方差函数,一种更为常见的损失函数是交叉熵函数。
梯度下降
梯度下降法即沿着梯度(切线)下降的方法,以一定的步长不断前进,使得函数取值逐渐减小的方法。
单次梯度下降的运算过程如下,多次执行,函数取值将稳定在最低点附近。
对于多为图像上的点,梯度下降的过程对每一维球偏导数后执行梯度下降。
神经元的梯度下降
单个神经元的梯度下降,其中激活函数使用了sigmoid函数,损失函数为交叉熵函数。
多样本下,单个神经元的梯度下降的代码表示。
神经网络的梯度下降
与神经元的梯度下降类似,从后向前逐层求解各个参数的偏导数。
使用js实现的求导过程