【深度学习4】神经网络-激活函数

发布于:2025-08-19 ⋅ 阅读:(14) ⋅ 点赞:(0)

神经网络概述

神经网络分为:一个输入层,一个或多个隐藏层,一个输出层

隐藏层中,训练集的值是无法直接看到的。

计算神经网络的层数不算入输入层,将输入层称为第0层。

下图是一个双层神经网络:

a的上标[]表示层数,下标表示第几个神经元。


神经网络输出

一个隐藏层的神经元中要计算两步:


多样本向量化

a^[m](i)中

[m]表示第m层

(i)表示第i个训练实例

因为每个神经元都要计算z和a,所有可以将他们向量化,不用循环计算多次:


激活函数

激活函数为模型引入非线性变换,从而让神经网络能够学习和拟合复杂的非线性关系。没有激活函数的神经网络,本质上只是多层线性回归模型,无法处理现实世界中诸如图像、语言、声音等具有复杂非线性特征的数据。

输出 = 激活函数(权重×输入 + 偏置)

上面例子中的sigmoid函数(0,1)就是一个激活函数.

激活函数可以将神经元的输出值映射到特定范围(如 0~1 或 - 1~1),避免数值过大导致的梯度爆炸或模型不稳定

tanh函数((-1,1)sigmoid函数的位移版)效果更好,用在二分类的输出层sigmoid更好。

不同层的激活函数可以不同。

目前隐藏层的激活函数普遍用ReLU函数

激活函数 特点 适用场景
Sigmoid 输出范围 (0,1),可表示概率;但存在梯度消失问题(输入过大 / 过小时梯度接近 0)。 二分类问题的输出层
Tanh 输出范围 (-1,1),中心对称;仍有梯度消失问题。 早期隐藏层(现已较少用)
ReLU 计算简单,缓解梯度消失;但存在 “死亡 ReLU” 问题(输入为负时神经元永久失效)。 卷积神经网络(CNN)隐藏层
Leaky ReLU 解决死亡 ReLU 问题,保留 ReLU 的高效性。 深度学习通用隐藏层
Softmax 输出多分类概率分布(和为 1)。 多分类问题的输出层

 

为什么要有非线性激活函数:如果一直用线性激活函数,有隐藏层和没有任何隐藏层是一样的,即没有激活函数的神经网络无法学习非线性关系。


随机初始化

逻辑回归中可以初始化为0,但是其他的不一定能这样。

如果w全初始化为0,则输入相同的东西计算得到的输出总是相同的,各个神经元在计算同样的东西。

可以令w = np.random.randn((2,2))*0.01 #输入两个特征,则w为2×2的矩阵,乘0.01因为如果w是一个很大的数,则通过激活函数计算后输出结果落在一个坡度很平缓的地方,梯度下降较慢,减慢学习速度,所以一开始×0.01需要一个比较小的数(初始化参数一般较小)。

b可以设置为0,即b = np.zero((2,1))


网站公告

今日签到

点亮在社区的每一天
去签到