多层神经网络
文章目录
单个神经元

一个神经元实际表示的数据公式为
y ^ = w ∗ x + b \hat y=w*x+b y^=w∗x+b
由于是线性关系,因此只能表示出线性图像,有很多局限性,比如在如下场景中:

线性关系所表示的图像形式为一条直线,要想找到一个线性模型将三角形划分在一起,将正方形划分在一起是不可能办到的,因此要使用更复杂的神经网络才能满足需求。
人类大脑神经与神经元
实际上,神经网络就是在模仿人类的运行机制,神经网络之所以称之为神经网络,也是仿照人类的神经元所取得的名字。

神经网络和人类大脑一样,收到相应的输入后得到相应输出。
人类接受输入的来源是各个神经元的末梢突触,神经网络仿照人类设置结点来表示神经元,用输入数据仿照神经元的突触。

人类收到多个神经元突触的输入后,输入经过神经元,最终交给大脑处理这些输入得到输出,同样的神经网络通过 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1,x2,x3,x4接收输入,经过神经网络得到输出结果。
神经元与矩阵
神经网络中结点各层结点中具有相应的线性关系,各节点的值等于上一层连接结点的对应输入乘以相应权重加上偏置,节点的值由上一层结点计算得到,节点同时又作为下一层输入。

神经网络中的结点是线性关系,因此神经结点之间的关系可以由矩阵运算表示。

神经元的串联
如果神经元仅仅是将多个神经元连接成一条直线,这种情况下串联的神经元似乎只有传递的作用, 那么一根和多根似乎没有区别。

同样的,在神经网络中单纯的增加神经结点的层数也是没有去别的的,就像神经元的串联一样。

无论由多少层神经结点,最终都可以表示成输出只与输入有关的线性关系,如果只能表示线性关系就只能模拟出线性模型,无法解决复杂的问题。
激活函数
生物神经元具有兴奋和抑制两种状态,当接受的刺激高于一定阈值时,则会进入兴奋状态并将神经冲动由轴突传出, 反之则没有神经冲动,因此神经元之间的串联才变得有区别。

仿照神经元,神经网络设置了激活函数来解决无论多少层神经网络都等效于一层的问题。由于激活函数都是非线性的,这样就给神经元引入了非线性元素,使得神经 网络可以逼近任何非线性函数,这样使得神经网络应用到更多非线性模型中。 常见的且简单的激活函数:

激活函数位置
激活函数加在结点的输出后,也就是让结点的输出作为激活函数的输入,然后激活函数的输出作为下一层结点的输入。

**激活函数最重要的特性:能求导!**因为在深度学习的训练过程中,要不断调整参数,调整参数采用的是梯度下降算法,因为结点的输出作为了激活函数的输入,因此激活函数必须可导。
注:激活函数在某一点不可导是被允许的,因此relu函数在x=0时不可导是被允许的。
激活函数的效果展示

没有激活函数时,模型只能表示线性关系,加入激活函数后,模型能更好的贴合实际函数关系。

另一个角度理解拟合和激活函数

图中红色为实际函数关系,不使用激活函数只能得到表示一条直线的线性关系,因此通过将两个relu函数得到的非线性结构相加模拟真实函数关系。
模型整体结构
虽然加入了激活函数,但是模型的整体结构还是可以用矩阵运算来表示。

神经网络的三种表现形式

神经网络的参数(可训练的)
深度学习中包含不可修改超参数,比如学习率,模型结构,还包括可以修改的在训练过程中可以不断调整的参数。深度学习的目的就是不断调整参数让最终的模型足够拟合真实函数关系。

在上图的神经网络中权重矩阵W ,c T c^T cT,偏置向量b 都是要训练的参数,这些可训练的参数统称为θ。
深度学习的训练过程

多层神经网络和单个神经元的深度学习流程是相同的。

在多层神经网络中:
- 从输入层向输出层传播,将输入层通过一层一层的神经结点计算得到最终的预测值的过程称为前向过程。
- 从输出层向输入层传播,采用链式求导法则逐层,求出LOSS函数在每一层中的参数的过程称为梯度回传过程。
- 在调整模型时,每个参数的梯度都要计算,并且每个参数都要进行更新。采用梯度下降算法。
全连接网络
全连接网络指的是神经网络中每层结点与上一层的所有结点都有连接。
**所谓深度学习,深度指的就是神经网络的层数。**神经网络的层数不是越多越好,神经网络的层数的增加或减少都有可能使得训练出来的模型的效果更好。 PyTorch 库中nn.Linear(in_features: int, out_features: int, bias: bool = True)
表示的就是全连接,in_features
为上一层输入的结点个数,out_featuress
为下一层输出的结点个数。
过拟合和欠拟合
欠拟合是指模型在训练数据上表现不佳,甚至连训练集上的基本模式也未能捕捉到
过拟合是指模型在训练数据上表现得非常好,甚至几乎完美,但在新数据(测试数据)上表现较差。
