第一部分:基本含义
神经网络(Neural Network)是一种模仿人脑神经元连接方式的机器学习模型,用于处理复杂的非线性问题。通过大量的参数和层级结构,神经网络可以学习数据中的特征,应用于分类、回归等任务。
机器学习和人类实现人生巅峰的例子对比:
如果把人比作神经网络,一次次摔倒就是反复训练,每一次的爬起,在绝望中寻找希望,都是为登上巅峰做准备。(失败乃成功之母)
神经网络和决策树之间的联系:
我们把上图旋转90度后:
神经网络可以看作是多个决策树的集合,或者多个简单模型的组合。不同层级的神经元会通过复杂的连接和权重共同作用,类似于多叉决策树的结构,逐层处理数据。
只不过:单个决策树是非参数模型,而神经网络是参数模型。
第二部分:神经网络核心思想和原理
(1)单个神经元模型(感知机)
x1,x2,...,xn 是输入的特征,每个输入特征都有相应的权重 w1,w2,...,wn。权重决定了该输入对神经元输出的重要性。
wx这些参数也可以转化为矩阵表示的形式:
因此,神经元模型本质上就是一个线性模型外侧套一个激活函数,有时也叫做感知器模型perceptron或者叫做感知机模型。
(2)神经网络(多层感知机MLP)
神经元是神经网络的基本构建单元,而神经网络是由大量神经元互相连接组成的一个系统。
一般来说,一个神经网络由3层组成,输入层、隐藏层、和输出层。输入层接收原始数据,隐藏层通过神经元进行特征提取,输出层生成最终的预测或分类结果。
如果纯是线性,那么随着隐藏层个数的增加,所有的线性运算都可以回归到输入和输出这两个里面(矩阵运算);同时,层数也不是越多越好,有些时候,随着层数的增加,训练效果反而不好了,称为“退化”
为了防止上述问题的产生,我们就需要用到激活函数层。
(3)激活函数层
①Step Function(阶跃函数):当输入大于等于 0 时输出 1,否则输出 0。
②Sigmoid Function(Sigmoid 函数):在输入值较大时输出接近 1,较小时输出接近 0,输入在 0 附近时输出接近 0.5。
③tanh函数(sigmoid函数的优化版)
sigmoid在0.5这作为分类标准,收敛慢,而且还很有可能会出现梯度消失的情况,因此,出现了tanh函数:
tanh 函数可以通过对输入的 2 倍应用 sigmoid 函数,然后乘以 2 再减去 1 来实现。
tanh是在0这作为分类标准。而且tanh函数关于原点对称,而sigmoid函数全部图像都在x轴上面,就没有原点对称。
而且sigmoid和tanh的导数图像也不一样(峰值):
tanh函数能够解决sigmoid函数收敛慢的问题,但是它们的导数图像长相上比较像,因此tanh无法解决sigmoid梯度消失的问题。
④ReLU Function(ReLU 函数)(目前最好用的函数):当输入大于等于 0 时输出输入值本身,小于 0 时输出 0。(能够解决sigmoid和tanh梯度消失的问题)
同时由于relu函数是线性的,计算上比sigmoid和tanh要快,也就解决了sigmoid收敛慢的问题。
relu函数的缺点(死亡神经元问题):
也就是当输入持续为负的时候,那么结果一直都是0。
relu的变体:
⑤(单个神经元)激活函数层的具体位置
⑥将激活函数层应用到神经网络中
⑦为什么激活函数能够实现优化效果?他的意义何在
我们前面说过,激活函数的主要作用就是将线性输出转化为非线性,那为什么要这么做呢?
首先,我们用的这个神经网络是由多个神经元组成的,每一个神经元本质上又是一个线性方程,那多个线性方程在一块(如果不加激活层),效果将会是:
但是我们实际想要的可能是:
因为没有归于绝对的直线分类标准,全是直线的网络就很难真正拟合数据,而且直线越来越多就会造成模型退化问题,也就是(2)中提到的。
使用了激活函数之后,线的变化形式有很多了,这样模型的拟合能力就会大大提升,模型的表达能力更强了,也就能更好地反映数据真实的分类情况。
⑧如何选择激活函数
不要把各种激活函数串联到一个网络中使用,不然模型很可能难以收敛。
如果使用relu,小心设置学习率,如果死亡神经元过多,可以试试relu的变体。
尽量不要使用sigmoid,可以试试tanh.
(4)归一化层操作softmax层
经过了上述的激活函数,得到了经过非线性变换之后的数值,但是如果我们想要让数据更加的美观,比如将输出的数据能够映射到0~1这个范围,并且这些值的和为1(转化成概率分布的形式),那么我们就需要在最后再进行一次归一化操作。
再度更新优化神经网络流程图:
softmax函数和sigmoid函数的联系:
由于sigmoid的输出范围也是0~1,就跟softmax又非常相像了:
①二分类时,这两个一样
②sigmoid主要用于多标签分类(正确答案可能有多个)
③softmax函数主要用于但标签多分类问题(正确答案只有一个)
(5)损失函数的应用
由于上面我们经过softmax之后,输出的结果是以概率的形式,那么我们就可以用交叉熵损失函数,它的计算就是以概率为基础的,详细可见我博客:机器学习之损失函数大汇总~MSE+MAE+对数损失函数+交叉熵损失函数-CSDN博客
我们的最终目的就是最小化这个交叉熵损失函数,来评估并优化模型。
(6)反向传播
反向传播的核心是通过链式法则计算损失函数关于每个神经元参数(权重和偏置)的梯度。这个过程从输出层开始,逐层向后计算梯度,直到输入层。通过梯度下降法,更新各层的权重和偏置。
(7)不同的神经网络之间的核心差异
①三层网络结构的不同
②损失函数的类型有什么不同
③求解损失函数的过程有什么不同,梯度下降搜索策略上的差异
④对模型过拟合问题的解决方式不同
第三部分:神经网络的优缺点
(1)优点
①范围广
问题上:无论是监督学习,非监督学习,半监督学习,他都能适用
方式上:分类和回归也都能实现
数据上:所有数据都能用,都会转化成数值计算的形式
②效果好
泛化能力好(现在的gpt能够手动创作并输出以前从未见过的全新的文章),容错能力高(尽管某些神经元坏死了,但是仍然不影响输出结果)
③性能好
能够进行并行计算,cpu和gpu
(2)缺点
①训练难度大
参数选取很重要,否则很容易出现梯度消失和梯度爆炸,同时需要的样本数量比较多