神经网络基础(笔记,自用)
神经元结构
- n个输入X1 - Xn,分别*各自的权值W1 - Wn后,加和,再加上一个偏置b得到一个数(其实是线性计算)
- 将这个数输入到一个激活函数中,输出一个结果,结果再传递到下一个神经元当中(是一个非线性计算)
如上图所示,最终是X1 - Xn做一次线性运算 + 一次非线性运算,最终会得到一个非线性运算的效果。
可以想象,如果将一组数据输入一个由成千上万个这样的神经元构成的神经网络,就相当于做很多很多次非线性运算,这些运算就可以近似组成一个非常非常复杂的函数(就跟泰勒展开差不多原理),来帮助我们获得我们想要的输出结果。
隐藏层:由于神经网络内部复杂,从外部看相当于一个盲盒,喂进去数据就会吐出结果,所以除了输入层和输出层,剩下的神经网络的层就是盲盒内部的层,称为隐藏层。
常见激活函数
- sigmoid函数:可以将负无穷到正无穷的数映射到0到1之间
- Relu: 小于0的数映射成0
随机梯度下降算法
梯度:可以近似理解为导数
算法目的:解决损失值卡在局部最优而得不到全局最优的情况
通俗点说就是,我们只会往下走,到不能再往下走的时候我们就停止(认为找到了最优解),我们希望走到山脚下(全局最优解),但是我们如果迈的步子特别小,就有可能困在半山腰的一个坑里(局部最优解),并认为这就是全局最优解,实际上并不是,还可以继续往下走,所以我们需要一种方法来避免这种情况。
-
小批量样本梯度下降:在每次梯度下降的过程中,只选取一部分的样本数据进行计算梯度,比如整体样本1/100的数据。在数据量较大的项目中,可以明显地减少梯度计算的时间。
-
随机梯度下降算法:只随机抽取一个样本进行梯度计算 由于每次梯度下降迭代只计算一个样本的梯度,因此运算时间比小批量样本梯度下降算法还要少很多,但由于训练的数据量太小(只有一个),因此下降路径很容易受到训练数据自身噪音的影响,看起来就像醉汉走路一样,变得歪歪斜斜的。
正向传播
神经网络根据输入的数据在神经网络里不断计算,传导,最终输出结果的过程。
反向传播
神经网络起初输出的结果是不符合我们预期值的,所以每一轮对神经网络的训练,就相当于拿着神经网络输出的“结果”和训练所用数据集标签中的“标准答案”,利用损失函数,从神经网络的输出端,反向往输入端传播,逐步更新每一个神经元的权值。
这样经过很多很多次训练,神经网络中的权值被训练的越来越“合适”,神经网络输出的预测结果也就越来越符合我们的预期。
损失函数
计算损失值的函数,用来反向传播,改变神经网络里每个神经元的权值,使损失值变得更小。