及激活函数的最终选择)
目录标题一、ReLU函数二、softmax函数三、恒等函数四、激活函数的选择一、ReLU函数除了Leaky ReLU优化解决可能神经元死亡问题还有PReLU(解决Leaky ReLU中的α是写死的)二、softmax函数之前的激活函数:阶跃函数sigmoid函数tanh函数ReLU都是二分类softmax确实一个多分类代码实现1importnumpyasnp# Softmax函数defsoftmax(x):returnnp.exp(x)/np.sum(np.exp(x))代码实现2importnumpyasnp axis 0 是列axis 1 是行 a np.arange(4).reshape((2,2)) a array([[0, 1], [2, 3]]) np.max(a) # Maximum of the flattened array 3 np.max(a, axis0) # Maxima along the first axis array([2, 3]) np.max(a, axis1) # Maxima along the second axis array([1, 3]) defsoftmax(x):# 如果是二维矩阵ifx.ndim2:xx.T xx-np.max(x,axis0)ynp.exp(x)/np.sum(np.exp(x),axis0)returny.T# 溢出处理策略xx-np.max(x)returnnp.exp(x)/np.sum(np.exp(x))一、为什么需要 Softmax神经网络的最后一层通常输出一组原始分数叫 logits比如[2.0, 1.0, 0.1]这些数字可正可负大小也没有限制不是概率。我们没法直接说“2.0 是xx 的概率”Softmax 就是来干这件事的把这组任意实数变成合法的概率分布。二、举个例子输出logits:z [2.0, 1.0, 0.1]第 1 步取指数e 2.0 ≈ 7.389 e^{2.0} \approx 7.389e2.0≈7.389e 1.0 ≈ 2.718 e^{1.0} \approx 2.718e1.0≈2.718e 0.1 ≈ 1.105 e^{0.1} \approx 1.105e0.1≈1.105第 2 步求和7.389 2.718 1.105 11.212 7.389 2.718 1.105 11.2127.3892.7181.10511.212第 3 步归一化y 1 7.389 11.212 ≈ 0.659 y_1 \frac{7.389}{11.212} \approx 0.659y111.2127.389≈0.659y 2 2.718 11.212 ≈ 0.242 y_2 \frac{2.718}{11.212} \approx 0.242y211.2122.718≈0.242y 3 1.105 11.212 ≈ 0.099 y_3 \frac{1.105}{11.212} \approx 0.099y311.2121.105≈0.099输出text[0.659, 0.242, 0.099]类别 1 的概率65.9%类别 2 的概率24.2%类别 3 的概率9.9%三、Softmax 和交叉熵的关系这两者几乎总是成对出现神经网络最后一层│▼输出 logits [2.0, 1.0, 0.1]│▼Softmax → 概率 [0.659, 0.242, 0.099]│▼交叉熵 → 损失 L -log(0.659) ≈ 0.417Softmax 负责把 logits 变成概率交叉熵负责衡量这个概率分布和真实标签的差距。三、恒等函数#恒等函数defidentity(x):returnx四、激活函数的选择** 如何选择激活函数**1隐藏层首选 ReLU如果效果不好可尝试 Leaky ReLU 等。Sigmoid 在隐藏层易导致梯度消失应尽量避免。Tanh 的输出均值为 0对中心化数据更友好但仍可能引发梯度消失仅适用于浅层网络。2输出层二分类选择 Sigmoid。多分类选择 Softmax。回归默认选择 Identity。