第一章 神经网络基础知识

第一章学习神经网络的前置知识

1. 模型构建

  • 介绍

    神经元:神经元细胞可以分为三个部分,输入,中间节点,和输出。输入和输出在生物体内都是化学物质或者是电信号,给神经元一个或多个输入,可以被中间部分处理,最后获得输出。对于这样模拟的一个简化的神经元模型,在计算机中就叫感知器。
    输入可以是X1,X2,X3,输出为Y,这时候中间过程可以是一个函数,比如:线性函数Z=X1W1+X2W2+X3W3,其中W1,W2,W3便是X1,X2,X3的权值。这时候可以加一个偏置数b,使之不过原点,Z=X1W1+X2W2+X3W3+b。还可以进一步变成f(Z),使之成为一个非线性函数,这样就可以把解决问题的邻域扩展至全部区域。f(Z)展开为: y = f ( x 1 w 1 + x 2 w 2 + x 3 w 3 + b ) y=f(x_1w_1+x_2w_2+x_3w_3+b) y=f(x1w1+x2w2+x3w3+b)

2. 模型训练

  • 2.1介绍

    模型训练好以后,最重要的就是如何让模型如何自主训练,来解决一些非线性问题,这个过程也叫做机器学习的过程。

  • 2.2数学期望

    在知道如何训练模型之前,我们需要知道什么是数学期望。什么是期望呢?在概率论和统计学中,数学期望(mathematic expectation [4] )(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。通常用E(X)表示数学期望。

    离散型随机变量X的取值为 X 1 , X 2 , X 3 . . . X n X_1,X_2,X_3...X_n X1,X2,X3...Xn,且 p ( X 1 ) , p ( X 2 ) , p ( X 3 ) . . . p ( X n ) p(X_1),p(X_2),p(X_3)...p(X_n) p(X1),p(X2),p(X3)...p(Xn)为X对应取值的概率,可理解为数据 X 1 , X 2 , X 3 . . . X n X_1,X_2,X_3...X_n X1,X2,X3...Xn出现的频率 f ( X i ) f(X_i) f(Xi),则:
    E ( X ) = ∑ k = 1 n E(X)=\sum\limits_{k=1}^n E(X)=k=1n
    设连续性随机变量X的概率密度函数为f(x),若积分绝对收敛,则该数据的数学期望为,也就是每一点的值和其概率乘积的积分:
    E ( X ) = ∫ − ∞ + ∞ x f ( x ) d x E(X)=\int_{-\infty}^{+\infty}xf(x)dx E(X)=+xf(x)dx

    在了解什么是数学期望以后,我们可以开始学习如果进行误差的计算。

  • 2.3计算误差

    模型的训练很重要的一点就是误差的计算,如果我们把误差的期望输出记为 y ^ \hat{y} y^。那么真实的值减去期望,再求绝对值,就可以代表我们运算结果和真实结果的偏离程度叫做误差,记为e,这样写 e = ∣ y − y ^ ∣ e=|y-\hat{y}| e=yy^.但是这样的公式太简单,它对数据不敏感,不能很好的表现出数据的变化导致的误差变化,我们希望哪怕误差只减低了一点点也可以快速的表现出来,于是出现了均方误差计算公式 e = 1 2 ( y ^ − y ) 2 e=\frac{1}{2}(\hat{y}-y)^2 e=21(y^y)2,这样如果误差小于1,则会变得更小,误差大于一,没变大一点都会变得更大,同时,为了防止平方导致本来误差没有那么大,但是显得很大,所以加上一个 1 2 \frac{1}{2} 21来进行平衡。当然,这样也不能完全平衡,所以目前主要使用交叉熵的公式,不需要费力理解,背下来即可,后面的内容中可能会对其进行描述,公式如下:
    e = − y ^ l o g y − ( 1 − y ^ ) l o g ( 1 − y ) e=-\hat{y}logy-(1-\hat{y})log(1-y) e=y^logy(1y^)log(1y)

    2.4学习规则
    在知道误差计算的方法以后,就可以根据误差计算的方法,制定一个学习规则,让计算机可以自动的去寻找一个使得误差最小的答案。规则可以是多种多样的,有效即可,这里我们介绍一个简单的规则,叫做反向传播误差的方法。

    反向传播误差,首先需要根据前面学到的这两个公式:
    (1) y = f ( x 1 w 1 + x 2 w 2 + x 3 w 3 + b ) y=f(x_1w_1+x_2w_2+x_3w_3+b) y=f(x1w1+x2w2+x3w3+b)
    (2) e = − y ^ l o g y − ( 1 − y ^ ) l o g ( 1 − y ) e=-\hat{y}logy-(1-\hat{y})log(1-y) e=y^logy(1y^)log(1y)
    知道其实e也是关于x的函数,但是我们的关键是目前已经知道一些x的值,所以需要得到确定的y的值,y越接近 y ^ \hat{y} y^越好,所以现在把已知的x带进去,权值w就成了未知数,于是可以推出计算误差的导数:
    e w ′ = d e d w e_w' = \frac{de}{dw} ew=dwde
    求导的方法就是正常的复合函数求导法,e对y求导之后y对w求导。在我们得到 e w ′ e_w' ew的值以后,就可以根据 e w ′ e_w' ew的值去调整权值w的大小,从而让误差越来越小。
    调整的思路是这样的,我们引入一个称为学习率的参数,记为 α \alpha α,学习率的范围是(0~1),它可以控制权值的变化大学,从而影响模型学习的速度和精度,如果 α \alpha α很小,那学习的速度就会更慢,但是得到的精度可能就会更高,因为是一点点逐渐变换的,反之学习速度会很快,但是可能会错过全局最优点,导致学习精度不高。因为我们要的是误差e越小越好,那么 e w ′ e_w' ew如果大于0,则是单调递增,所以要变小就需要减小w的值,如果 e w ′ e_w' ew小于0,则说明这是一个单调递减的函数,所以要变小它的值,要让w增大,于是可以想到公式 Δ w = α e w ′ \Delta w =\alpha e_w' Δw=αew,可以代表权值的变化, Δ w \Delta w Δw可以随着学习率的变化而变大变小,同时,还可以同时跟随 e w ′ e_w' ew的符号变化,所以可以得出权值的变化公式为:
    w n e w = w p r e − Δ w w_{new} = w_{pre} - \Delta w wnew=wpreΔw这里new的下标代表是新的,pre代表是先前的。
    当然,可以看到上面的公式(1)里面不仅仅只有w,还有一个偏置数b,这个b的变化可以参考上面说的,和w一样的变化,先对e求b的偏导得到 e b ′ e_b' eb,之后就是一样的:
    第一步: e b ′ = d e d b e_b' = \frac{de}{db} eb=dbde 第二步: Δ b = α e b ′ \Delta b =\alpha e_b' Δb=αeb 第三步得到偏置数的变化公式: b n e w = b p r e − Δ b b_{new}=b_{pre}-\Delta b bnew=bpreΔb
    我们只需要不断的进行上述的循环,到了 Δ w \Delta w Δw Δ b \Delta b Δb几乎为0的时候,就找到了使得误差最小的公式,你也可以设置一个你期望的误差值,到了这个误差值就结束循环。
    同时,需要注意的是,因为权值有三个 w 1 , w 2 , w 3 w_1,w_2,w_3 w1,w2w3,所以我们在训练的时候也需要分别求出 Δ w 1 , Δ w 2 , Δ w 3 \Delta w_1,\Delta w_2,\Delta w_3 Δw1,Δw2,Δw3,之后分别计算出 w 1 n e w , w 2 n e w , w 3 n e w w_{1new},w_{2new},w_{3new} w1new,w2new,w3new

    总结一下,感知器模型的学习规则如下
    (1)计算误差对w和b的偏导数 e w ′ e_w' ew e b ′ e_b' eb;
    (2)设置一个学习率 α \alpha α,并计算出w和b的变化量 Δ w \Delta w Δw Δ b \Delta b Δb;
    (3)计算出改变后的新权值和新偏置数 w n e w w_{new} wnew b n e w b_{new} bnew;
    (5)不断重复以上操作,直到误差小到符合标准。

3. 激活函数

** 3.1 介绍**

在第一部分模型构建那里的公式 y = f ( x 1 w 1 + x 2 w 2 + x 3 w 3 + b ) y=f(x_1w_1+x_2w_2+x_3w_3+b) y=f(x1w1+x2w2+x3w3+b),我们只说f(.)是一个非线性的函数,并没有说它是什么样子的。因为我们一开始仅有输入的 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3和数学期望 y ^ \hat{y} y^,我们为了得到w和b,那我们就要先把公式y=f(x)写出来,只有f(x)确定了我们的工作才可以进行,所以,我们把这个公式f(x)称之为激活函数。当然,非线性函数的种类是无穷多的,要选择哪些来作为我们的激活函数,就是下面的内容。要记得,虽然真正符合这几个输入和输出的激活函数可能是千奇百怪的,但是f(z)的图像也不是向激活函数原本的图形那样规则的,因为它是复合函数,所以,这个f(z)在w和b的调整下,总是可以向着其原本图像的样子去逼近,从而得到一个可以接受的近似结果,这也就是选择任意的激活函数都有可能起作用的原因,差别只是逼近的好和坏而已,如果没有明确的可选的方法,那不如把各种激活函数都试试,看看谁更好。下面,我们将介绍三种常用的激活函数。

3.2 Sigmoid函数
Sigmoid函数的值域是(0,1),所以也经常被用于归一化操作,它的公式和图像如下:
f ( z ) = 1 1 + e − z f(z)=\frac{1}{1+e^{-z}} f(z)=1+ez1Sigmode函数,图片来自百度侵权请联系15125216546
该函数的好处是:可以把定义域在 ( + ∞ , − ∞ ) (+\infty,-\infty) (+,)上的函数映射到(0,1)区间,这样y的值不会超过1,大大减少了计算负担,并且它结构简单,易于求导,所以是最早的激活函数。
ps:你把分子从1改成x,其输出范围就可以变成(0,x)
其结构简单的原因通过其求导就很容易证明:
f ( z ) ′ = ( 1 1 + e − z ) ′ = e − z ( 1 + e − z ) 2 = f ( z ) ( 1 − f ( z ) ) f(z)'=(\frac{1}{1+e^{-z}})'=\frac{e^{-z}}{(1+e^{-z})^2}=f(z)(1-f(z)) f(z)=(1+ez1)=(1+ez)2ez=f(z)(1f(z))
从其结果可知,在写程序时,如果激活函数是Sigmoid,那么根本就不需要真的进行求导计算,只需要进行加减法和乘法就行,效率大大提高

但是缺点是:当你的输入的值很大或很小时,函数的值会趋于0或者1,这样期望和输出几乎一样,难以判断,同时可以从图上看出,在这个时候,函数的梯度变化为0,这也叫做梯度消失现象,可能导致误差不会改变,误差求导也就不变,使得学习规则失效。

缺点的处理方法:控制输入,使之保持在不失效的范围,可以从图中看到,输入的在0附近的时候,梯度是不会消失的,可以利用好这一点进行处理。

3.3 Tanh函数
Tanh函数,中文是双曲正切函数,它是双曲正弦函数(sinh)与双曲余弦函数(cosh)的比值。它可以把输入是 ( − ∞ , + ∞ ) (-\infty,+\infty) (,+)映射到 ( − 1 , 1 ) (-1,1) (11),和Sigmoid相比,其优势在于可以输出负数,以下是Tanh函数的公式和图像( z = 0 z=0 z=0时, f ( z ) = 0 f(z)=0 f(z)=0, z z z趋于 ± ∞ \pm\infty ±时, f ( z ) = ± 1 f(z)=\pm1 f(z)=±1)。
f ( z ) = e z − e − z e z + e − z f(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} f(z)=ez+ezezez图片来自网络,侵权请联系15125216546

对Tanh函数求导可得:
f ( z ) ′ = ( e z − e − z e z + e − z ) ′ = 4 ( e z + e − z ) 2 = 1 − f ( z ) 2 f(z)'=(\frac{e^z-e^{-z}}{e^z+e^{-z}})'=\frac{4}{(e^z+e^{-z})^2}=1-f(z)^2 f(z)=(ez+ezezez)=(ez+ez)24=1f(z)2
优点:可以看到,tanh函数和sigmoid函数一样,求导也具有简单的形式,并且它的范围要比sigmoid更广,并且在输入是0附近时,梯度下降更快,也就代表它在这里可以更快地逼近目标值。
缺点:比sigmoid要复杂一些,并且也具有梯度消失现象。

3.4 ReLU函数
正所谓大道至简,最高明的变化就是不变化,所以就出现了ReLU函数,也叫修正线性单元(Rectified Linear Unit)。它是一个分段函数,大于0时,值就是其本身,小于0时,值为0.单从分段来看它是线性函数,但是从整体来看,它又是非线性函数。其思路是一个非线性函数,不管它怎么扭,单从某一个区间来看,它还是一个线性函数,所以可以趋近于这个区间,在人工智能运用是,往往是多段ReLU的集合(因为输入X是有许多的,同一个位置的 X 1 X_1 X1也会有好多个,这么多ReLU足以组合成任意的复杂曲线。以下是ReLU的函数和图像:
f ( z ) = { z , z > 0 0 , z ≤ 0 f(z)=\left\{ \begin{aligned} z, \hspace{1cm}& z>0\\ 0, \hspace{1cm}& z\leq{0} \end{aligned} \right. f(z)={z0z>0z0
图片来自网络,侵权请联系1700098233@qq.com
ReLU函数是现在用得最多的激活函数,原因也很简单,因为它比前面两种都要简单,并且求导更简单:
f ( x ) ’ = { 1 , z > 0 0 , z ≤ 0 f(x)’=\left\{ \begin{aligned} 1, \hspace{1cm}&z>0\\ 0, \hspace{1cm}&z\leq{0} \end{aligned} \right. f(x)={1,0,z>0z0

可以见到,如果输入大于0,则输出恒为1并且永远不会出现梯度消失的情况,并且它的下降速度要比前面的sigmoid和Tanh函数要快,所以性能更好。但是缺点就是在输入小于0时,会出现梯度消失的情况,所以有了其变种公式Leaky ReLU函数,其公式和图像如下:
f ( x ) = { z , z > 0 a z , z ≤ 0 f(x)=\left\{ \begin{aligned} z,\hspace{1cm} z>0\\ az,\hspace{1cm}z\leq{0} \end{aligned} \right. f(x)={z,z>0az,z0
图片来自网络,侵权请联系1700098233@qq.com
虽然LeakyReLU函数看着比ReLU函数更好,但是因为往往输入都不涉及到负数,所以用ReLU函数即可。

3.5总结
没有哪个激活函数是最好的这样的说法,主要看的是需求。Sigmoid函数主要用于解决回归问题,比如研究电线的粗细和上面的站的麻雀数量是否相关这样的问题。Tanh函数也可以用于回归问题,或者其他的一些问题,比较灵活。ReLU在解决分类问题上有着不错的效果(因为不是可以为0)。

4.损失函数

4.1 介绍
我们在最开始已经讨论过误差e的计算方法,每种误差的计算函数都叫做损失函数,记为 J J J,损失函数就等同于误差,它输出的值越小,网络就越精确。其实常见的损失函数就是我们一开始介绍的那三种计算误差的函数,我们来依次说明一下。

4.2 绝对值损失函数
在一开始,我们介绍的误差计算中 e = ∣ y − y ^ ∣ e=|y-\hat{y}| e=yy^,这是在假设只有一组输入 X = x 1 , x 2 , x 3 X={x_1,x_2,x_3} X=x1,x2,x3的情况下,但是实际上往往会有多组输入(记为m组)。于是,我们可以得出其损失函数为,全部的e加起来的平均值,称之为绝对值损失函数:
J ( y , y ^ ) = J ( w , b ) = 1 m ∑ i = 1 m ∣ y i − y i ^ ∣ m 为样本的数量, y i 为第 i 个样本的实际值, y i ^ 为第 i 个样本的期望输出值 J(y,\hat{y})=J(w,b)=\frac{1}{m}\sum\limits_{i=1}^{m}|y_i-\hat{y_i}|\\ m为样本的数量,y_i为第i个样本的实际值,\hat{y_i}为第i个样本的期望输出值 J(y,y^)=J(w,b)=m1i=1myiyi^m为样本的数量,yi为第i个样本的实际值,yi^为第i个样本的期望输出值
因为, y ^ \hat{y} y^是一个常数,所以 J J J其实是一个关于 y y y的函数,但是 y y y又是关于 w , b w,b w,b的二元函数,所以 J J J也是一个二元函数,所以它的图像是三维的,类似于一个倒着的锥子,找不到三维的图,我又不想画,只有二维的界面图,大家自行想象一下。
图片来自网络,侵权请联系1700098233@qq.com

训练的话就是找这个锥子的尖头。当然如果w的个数不为1,则它是一个多维函数,但是训练时也是找最低点。

4.3 均方差损失函数
我们可以根据上面的绝对值损失函数和前面计算误差的知识,猜到这个==均方差损失函数(Mean Square Eorr,MSE)==长什么样子:
J ( y , y ^ ) = 1 m . 1 2 . ∑ i = 1 m ∣ y − y ^ ∣ 2 J(y,\hat{y}) = \frac{1}{m}.\frac{1}{2}.\sum\limits_{i=1}^m{|y-\hat{y}|}^2 J(y,y^)=m1.21.i=1myy^2
均方差损失,函数如果w只有一个,则它的图形也是一个三维的图像,要比绝对值损失函数,恰好像一个正着放的碗,所以也叫做碗函数,太难画了,我就不画了,找了一个横截面,自行想象。
图片来自网络,侵权请联系1700098233@qq.com
但是,如果w不仅仅只有一个,那它也就成了多维函数,这时候就有一个上面没有提到的问题,它可能有多个最低点,可以画一个平面图说明:
我自己画的,不侵权了
可以看到,它的有许多个”最低点“,里面最低的点叫做全局最优点,其他叫做局部最优点。有时候数据不够或者其他的,会陷入局部最优点里面出不来(因为该点两边的梯度符号相反,会让电脑认为找到了最优点)。但是,不需要担心,因为多数情况下,局部最优点的误差也是在人们可以接受的范围内,它输出的值和用全局最优的输出的值差距不大,所以模型也可以很好的工作。如果误差真的很大,可以考虑改变初始参数,重新训练一下试试。

4.4 交叉熵损失函数
我们可以先回忆一下之前的交叉熵误差公式 e = − y ^ l o g y − ( 1 − y ^ ) l o g ( 1 − y ) e=-\hat{y}logy-(1-\hat{y})log(1-y) e=y^logy(1y^)log(1y),我们可以发现,如果规定了 y ^ \hat{y} y^的值为0或者是1,那么这个函数完全可以变成一个分段函数,我们称其为Cost函数。
e = { − l o g y , y ^ = 1 − l o g ( 1 − y ) , y ^ = 0 e=\left\{ \begin{aligned} -logy,\hspace{1cm}\hat{y}=1\\ -log(1-y),\hspace{0.12cm}\hat{y}=0 \end{aligned} \right. e={logy,y^=1log(1y),y^=0
于是可以这样表述交叉熵损失函数的公式:
J ( y , y ^ ) = J ( w , b ) = 1 m ∑ i = 1 m C o s t ( y i , y i ^ ) J(y,\hat{y})=J(w,b)=\frac{1}{m}\sum\limits_{i=1}^mCost(y_i,\hat{y_i}) J(y,y^)=J(w,b)=m1i=1mCost(yi,yi^)
∑ i = 1 m C o s t ( y i , y i ^ ) = {   − l o g ( y i ) , y i ^ = 1 − l o g ( 1 − y i ) , y i ^ = 0 \sum\limits_{i=1}^m Cost(y_i,\hat{y_i})=\left\{\ \begin{aligned} -log(y_i),\hspace{1cm} \hat{y_i}=1\\ -log(1-y_i),\hspace{0.45cm}\hat{y_i}=0 \end{aligned} \right. i=1mCost(yi,yi^)={ log(yi),yi^=1log(1yi),yi^=0
其实稍加分析,我们就会发现,y的值也被限定在(0,1)之间,那什么样的z会是0,1呢,那就只有分类,是就是1,不是就是0。因为交叉熵函数的的输出y是固定的,所以其实它不会存在局部最优的问题,顾常常用于分类问题,以后遇到分类问题就想到交叉熵损失函数即可
最后,其实用一开始的公式来表达交叉熵损失函数也可以,这样就不用分段了,求导也不用分开:
J ( y i , y i ^ ) = J ( w , b ) = 1 m . − y i ^ l o g ( y i ) − ( 1 − y i ^ ) l o g ( 1 − y i ) = − 1 m . y i ^ l o g ( y i ) + ( 1 − y i ^ ) l o g ( 1 − y i ) J(y_i,\hat{y_i})=J(w,b)=\frac{1}{m}.-\hat{y_i}log(y_i)-(1-\hat{y_i})log(1-y_i)=\\-\frac{1}{m}.\hat{y_i}log(y_i)+(1-\hat{y_i})log(1-y_i) J(yi,yi^)=J(w,b)=m1.yi^log(yi)(1yi^)log(1yi)=m1.yi^log(yi)+(1yi^)log(1yi)

4.5 总结
神经网络解决的问题其实可以分为两种,一种回归,一种分类,回归问题用绝对值损失函数或者是均方差损失函数解决,分类问题用交叉熵损失函数解决,当然,具体问题可以具体分析。

5.本章总结

在本章,我们学习了一个简单的感知器模型长什么样子,学习了误差的计算方法,从而学会了如果设计简单的感知器模型。之后我们学习了三个激活函数,分别是Sigmoid函数,Tanh函数和ReLU函数,它其实都是非线性函数,用于把输入扩展到非线性领域。还学习了损失函数,也是三个,分别是绝对值损失函数,均方差损失函数,交叉熵损失函数,它们其实就是误差的计算方法,代表着误差。解决回归问题主要用Sigmoid函数或者是Tanh函数作为激活函数,绝对值函数或者均方差函数作为损失函数;解决分类问题用ReLU函数作为激活函数,用交叉熵函数作为损失函数效果更好。
在下一章,我们开始学习如何搭建单层的神经网络。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值