1. 全连接神经网络的整体结构

  1. 输入层:就是输入数据
  2. 隐藏层:可以有很多,视任务情况而定,要是隐藏层过大,会导致过拟合(就是你测试训练的结果比较好,精度很高,loss值也很低,但是验证的时候、测试的时候,效果就很差,例如,平时练习都100分,高考就30-40分,训练集很好,但测试集不行)

2. 全连接神经网络的结构单元

就和我们的神经元一样,这是神经网络的一个结构单元

前面就是和线性回归一样的权重和偏置求和,然后再经过一个激活函数,前面逻辑回归里面的sigmoid函数,就是一个激活函数

a = h (w * x + b),h就是激活函数

激活函数一定是非线性的,为什么呢?因为本身前面求和w*x+b就是线性了,线性函数再套一个线性函数,那不还是线性吗,相当于就是那这个激活函数就没有意义了。

3. 激活函数的作用

为什么要加入激活函数?

我们神经网络可能会有很多隐藏层,那么如果没有激活函数,也就是说每一层隐藏层之间x和y之间都是线性的关系,那就没有意义了啊,和线性回归就没有任何区别了,线性函数里面套线性函数,还是线性,不就相当于,改了一下权重吗。

但是我们实际生活中的任务复杂的多,所以我们需要有不同的函数,去达到不一样的效果,这也就是为什么,激活函数一定是非线性的

4. 常见激活函数

1. Sigmoid

1. 为什么梯度会消失?

  • 试想一下,如果多个连续的隐藏层都使用了Sigmoid函数,会出现函数要求多个偏导,更新w(多元函数、链式法则)。就相当于w = w + 0.1*0.1*0.1*0.1*0.1*0.1*0.1*0.1*0.1*0.1*0.1,我们要更新w,但是w可能直接不动了 ,但是不能不动啊,不动就学不到东西了,这就是梯度消失问题。

2. Sigmoid不是关于0点对称的,这个会导致更新w的时候,比较慢

3. 梯度更新如果走太远,会导致w基本不更新,或者说,更新的太慢,训练很耗时

2. Tanh

双曲正切函数

Tanh解决了Sigmoid不是关于0原点对称的问题

Tanh的导数最值是1,而Sigmoid导数最值是0.25,所以在一定程度上缓解了梯度消失问题,但是梯度走的太远,最后还是会趋于0,梯度消失问题并未解决

3. ReLU

看图像,函数<0恒为0,>0就是一个一次函数,导数<0就等于0,>0就等于1

因此它解决了梯度消失的问题,因为导数不是0就是1。并且一次函数运算也比指数函数更快

但是它没有解决函数图像不关于原点对称,更新较慢的问题

而且如果当z<0,导数也<0,就会导致w = w + 0 w完全不更新了,神经元死亡了,完全不动了(上面两个只是动的慢)

4. Leaky ReLU

Leak ReLU相对于ReLU,就是加了个常数a,但还是分段函数,那么z<0时,导数等于a,而不再是0了,保证了更新,解决了ReLU神经元死亡的问题

但是可以看到,导数值恒大于0了,这就导致梯度更新不会出现负号-了,也就是说,w只能往正的方向更新,这样可能会出现问题。

5. SoftMax

它一般用于输出层,它是一个多分类的,将每一个值映射成,如:0.249 0.664 0.087,可以理解为概率,然后选择一个最好的选择(0.664)

6. 总结

可以看到每个函数都有自己的优缺点,因此没有最好的激活函数,只有适合的、符合要求的激活函数

但是不得不说,ReLU和LeakReLU,相比于Sigmoid和Tanh解决了很多问题,因此实际上,在隐藏层中,大部分使用的都是ReLU和LeakReLU函数

但是,在后面要学习的循环神经网络中,Sigmoid和Tanh有它们自己独特的作用。尤其是Sigmoid函数,它可以用来做二分类,那ReLU和LeakReLU就不行了呀

5. 全连接神经网络的前向传播

前向传播其实前面已经讲过了,就是给定了w和b,然后传入x得到y的过程,就叫做前向传播

但是比起线性回归和逻辑回归,全连接神经网络的前向传播要复杂的多。就有点像俄罗斯套娃,一层层套,最后得到结果。

我们仔细看这张图,可以看到,a11神经元分别接收X1和X2的参数,但是它们的权重不同,a12也是同理。所以就是可以理解为,实际上a11学习到一部分X1、X2的内容,a12也学习到一部分X1、X2的内容,但是a11和a12学习到的内容是不同的(权重、偏置不同),然后最后整合到a21,就可以得到完整的信息

所以前向传播就是模型一步步推理、学习的一个过程

所以,训练模型就这几步:

  1. 确定w,b,前向传播计算
  2. 计算loss误差值
  3. 计算梯度,更新权重、偏置
  4. 反向传播

6. 神经网络模型的损失函数

均方误差就是线性回归的损失函数,交叉熵就是逻辑回归的损失函数。

比如说,如图,在我们训练的过程中,我们训练了200次,但是我们发现其实25轮的时候就基本比较平稳了,所以事实上,我们训练个100轮就够了,如果训练轮次太多,就很容易出现过拟合的现象。

过拟合,指的是模型在训练数据上表现非常好(例如准确率很高、损失很低),但在未见过的新数据(如验证集或测试集)上表现明显变差的现象。

过拟合的典型表现:

  • 训练误差(loss)持续下降,接近0;
  • 验证误差先下降后上升;
  • 训练准确率远高于验证/测试准确率。

常见原因:

  1. 模型太复杂(比如参数太多,深度太深);
  2. 训练数据太少或不够有代表性
  3. 训练时间过长(模型开始记住噪声而非规律);
  4. 特征过多而样本不足(高维小样本问题)。

如何缓解过拟合?

  • 增加数据量(更多、更多样化的训练样本);
  • 简化模型(减少层数、神经元数量等);
  • 正则化(如 L1/L2 正则);
  • 使用 Dropout(神经网络中)
  • 早停法(Early Stopping):在验证误差不再下降时停止训练;
  • 数据增强(尤其在图像、语音等领域);
  • 交叉验证来更可靠地评估模型性能。

因此,在我们训练的时候,最好要将数据集划为82,80%训练,剩下20%测试检验

7. 全连接神经网络的反向传播(BP)

反向传播其实就是:从输出层反向推导,更新每一层的w和b

我们知道,前向传播之后我们需要计算损失然后计算梯度,更新w和b,但是神经网络层数这么多,w和b这么多,怎么更新呢?

简单来说就是,根据计算出来的loss值,然后通过复合偏导(链式法则)然后一步一步倒推回去,然后一层一层反向更新w和b的值

  • 先知道最终错在哪(输出误差),
  • 然后一层一层往回推:“这个错误有多少是由上一层造成的?”
  • 这样就能高效地分配“责任”给每个参数。

如果不用反向传播,而用数值微分(比如对每个权重微小扰动看损失变化),计算量会爆炸(O(n) 参数就要 O(n) 次前向传播)。而反向传播只需一次前向 + 一次反向,就能算出所有梯度,效率极高。

更多推荐