有关激活函数的各个细节

1.神经网络最后一层 要有激活函数么?

不一定要有激活函数。见过代码,对mnist进行多分类的。直接wx+b,然后后面又接了一个soft max,使用交叉熵做loss function,学习率是0.01,虽然准确率不怎么样大概0.917(学习1000个batch,batch size是100),,但是证明 最后一层并不一定需要激活函数(也可以认为soft max也是一种激活函数)。


2.relu在0点处的导数?
ReLU(x) = max(0, x)
 First, you can just arbitrarily assign a value for the derivative of y = ReLU(x) when x = 0. Common arbitrary values are 0, 0.5, and 1.

A second alternative is, instead of using the actual y = ReLU(x) function, use an approximation to ReLU which is differentiable for all values of x. One such approximation is called softplus which is defined y = ln(1.0 + e^x) which has derivative of y’ = 1.0 / (1.0 + e^-x) which is, remarkably, the logistic sigmoid function. Neat!

3.神经网络能不能使用多种激活函数?

我想是可以的。并没有相关论文说一个神经网络不能使用多种激活函数。

4.什么样的函数 能成为激活函数?

激活函数一种映射h:R->R。且几乎处处可导 。激活函数一般具有以下性质:

-非线性

-几乎处处可导

-计算简单

-单调性

-输出值范围有限

5.什么时候选择a函数,什么时候选择b函数

a.2-3层不是很多层,任意可以尝试。

b.很多层的时候,不可以随意选择。会有梯度爆炸、梯度消失的问题。卷积推荐relu,recurrent推荐relu和tanh,

c.当你知道你想逼近的函数的某些特征时候,你可以选择可以更快近似这个函数的激活函数。比如sigmoid对于分类器很有效。因为要近似一个分类器,sigmoid的combine要比relu更容易,可以更快训练过程和收敛。

d.如果你不知道你想要逼近的函数的性质,你可以从relu开始,再尝试其他的激活函数。relu通常还不错,作为一个通用
的近似器。

e.如果想让结果在(0,1)之间,使用Sigmoid(如LSTM的各种Gates

f.如果想网络训练的很深,不要用S型的激活函数;

g.-如果使用ReLU,要注意初始化和learning rates的设置

h.如果使用ReLU,出现很多神经元死亡问题,且无法解决,可以尝试L-ReLUP-ReLUReLU的变体;

 

6.为啥要有激活函数?
a.神经网络中的激活函数能够引入非线性因素,提高模型的表达能力

b.一些激活函数能够起到特征组合的作用。

比如对于sigmoid函数σ(x)=1/(1+e^-x)。对e^x进行泰勒展开

平方项体现了特征的两两组合:


7.不同的激活函数各自有哪些性质?
a.step function

y=wx+b

y>thres y=1,否则为0。
那么当对多分类问题进行预测的时候,你的ouput很容易出现多个1的情况,你很难决定到底该选择哪个类别。
在训练的时候,你需要只有那个正确类别的位置为1,其他都是0,这很难train和收敛。

所以这种太过生硬的要么激活,要么不激活的激活函数 可能不太ok。我们想要一个可以给出'中间值'的激活函数,而这个中间值可以表示为概率或者置信度。

b.线性激活函数

如果A=cy(y这里是wx+b)是否可以呢。这是一个线性激活函数,其问题是,A对y的导数完全是常数,并不依赖于y的改变。
注意在这里思考,为什么我们想让A对y的导数依赖于y。 

Not possible to use backpropagation  (gradient descent) to train the model—the derivative of the function is a constant, and has no relation to the input, X. So it’s not possible to go back and understand which weights in the input neurons can provide a better prediction.

 

此外最大的问题是,如果是这种线性激活函数,一层层stack起来,最终的结果 还是一种线性,产生不了任何非线性。

 

c.sigmoid

非线性,sigmoid的combine仍然是非线性,它有比较平滑的导数。激活值有范围(0,1),而不是像线性函数一样
没有范围。此外它不像阶跃函数,非0即1,而是给出中间值,这个中间值可以表示为概率。
此外这个函数在x=±2的时候,梯度较大,会倾向于将激活值带到曲线的两侧。

问题:在曲线两侧,梯度很小,有梯度消失问题。NN在这个时候会拒绝学习或者学习速度非常慢。
有一些办法来处理这样的情况,所以应用的还挺广泛,尤其分类任务中。

输出不以0为中心,可能导致训练缓慢;(为什么不以0为中心,就慢了!!参考这篇文章https://liam.page/2018/04/17/zero-centered-active-function/)

指数计算,计算复杂度高;

d.tanh

tanh(x)=2*sigmoid(2x)-1,是一种经过scaled的sigmoid函数。所以具有sigmoid函数的所有特性。
激活值是有界的(-1,1)。它与sigmoid的最大不同是梯度更陡峭(某种程度上可以让收敛速度更快)。所以在使用的时候需要注意你对梯度的要求。此外tanh输出是以0为中心的。
tanh也存在梯度消失的问题。tanh使用得很广泛。

e.relu

A(x) = max(0,x)
首先relu看着好像有点像线性激活函数,但是实际上它是非线性的。relu的combine仍然是非线性的(任意函数都可以使用relu的combine来进行近似),所以我们可以stack layers。relu的激活数值范围是[0,inf]。

relu的激活具备稀疏性。tanh和sigmoid在激活的的时候是dense的,所以很costly,而relu只有一部分被激活,所以其是稀疏的和高效的,提供了神经网络的稀疏表达能力,更轻量级。relu的输出不是以0为中心的。

relu也有缺陷。relu图像左边是直线,所以那块的梯度是0。这会导致对错误和输入的变化停止反应,因为梯度是0。这叫做relu死亡问题。这会导致神经元死亡,网络的一大部分死掉。

有一些补救方法,其方法是将左边的水平线,变为y=ax,以让左边的梯度不再为0。
Leaky ReLU:α固定为x比较小的值,如0.01、0.05;
Parametric ReLU: α作为参数,自适应地从数据中学习得到;
Randomized ReLU:随机生成一个α,再进行修正;

与tanh和sigmoid相比,relu在计算上更高效,因为使用的是更简单的数学运算。在设计nn的时候,需要注意。

f.ELU

 

 

8.为啥要用bias?

答案很简单,我们考虑最简单的情况y=wx,x是一维向量,不加 bias 你的分割线就必须过原点,这显然是不灵活的。有了bias我们就可以上下左右移动我们的线了。神经网络是一样的道理。

<think>嗯,用户想了解Softmax层或者Softmax激活函数。首先,我得回顾一下自己对这个概念的理解。Softmax通常用在神经网络的输出层,特别是在多分类问题中。它的作用是将输入的原始分数(logits)转化为概率分布,这样每个类别的概率都在0到1之间,并且所有类别的概率之和为1。 那我要怎么组织这个回答呢?可能需要分几个步骤来讲解。首先解释Softmax的定义,然后说明它的数学表达式。接下来可以谈谈它的应用场景,比如多分类任务中的常见用法。还要提到它的特性,比如指数函数的作用是放大差异,使得概率分布更明显。另外,可能需要注意它的数值稳定性问题,比如指数可能导致数值溢出,这时候通常会引入一些技巧,比如减去最大值来处理。 用户可能想知道为什么使用Softmax而不是其他归一化方法。这时候需要对比,比如和sigmoid的区别,Softmax处理的是互斥的多分类,而sigmoid可能用于多标签分类。另外,Softmax与交叉熵损失函数的关系也很重要,通常结合使用,这样可以简化梯度计算。 还要注意一些细节,比如Softmax的导数特性,这在反向传播中很关键。可能还要提到在实际框架中的实现,比如TensorFlow或PyTorch中的使用方式,以及处理数值稳定性的常用方法。 有没有可能用户是刚开始学习机器学习,所以需要避免使用过于复杂的术语?可能需要用简单的例子来说明,比如有三个类别的分类问题,输入logits经过Softmax后变成概率。或者举一个具体的计算例子,让用户更直观地理解。 另外,用户可能对Softmax的缺点感兴趣,比如对极端值敏感,或者计算量较大的问题。这时候可以提一下替代方案,比如使用LogSoftmax结合NLLLoss来提升数值稳定性。 需要确保回答的结构清晰,分点说明。可能的结构是:定义、数学公式、作用、应用场景、优缺点、实际应用中的注意事项,以及与其他激活函数的对比。这样用户能逐步了解Softmax的各个方面。 检查一下数学公式是否正确。Softmax的公式应该是对于每个元素i,输出是e的z_i次方除以所有元素e的z_j次方的和。写成LaTeX的话,独立公式要用$$...$$,行内用$...$。比如,独立公式: $$ S(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} $$ 确保这个部分正确,并且按照用户给的系统级指令来格式化。 还要确认是否提到了梯度计算,比如Softmax的导数在反向传播中的简化形式,特别是在结合交叉熵损失时的优势。这部分可能对于理解为什么Softmax被广泛使用很重要。 总结一下,回答应该包括以下几个部分: 1. Softmax的定义和作用 2. 数学表达式 3. 应用场景 4. 特性(如概率转换,指数放大差异) 5. 数值稳定性处理 6. 与交叉熵损失的关系 7. 优缺点 8. 实际使用中的例子或注意事项 这样结构清晰,用户能一步步理解。同时,要注意用中文,避免术语过于晦涩,适当举例说明。现在把这些点组织成连贯的内容,确保符合用户的格式要求,特别是数学表达式的正确使用。</think>### Softmax激活函数介绍 #### 1. **定义与作用** Softmax是一种常用的激活函数,通常用于神经网络的**输出层**,特别是在**多分类任务**中。它的核心作用是将一组实数(称为**logits**)转化为**概率分布**,使得每个输出值的范围在$[0, 1]$之间,且所有输出之和为1。 --- #### 2. **数学公式** 对于输入向量$z = [z_1, z_2, ..., z_C]$($C$为类别数),Softmax的计算公式为: $$ S(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} $$ - **$e^{z_i}$**:对输入值取指数,放大数值差异。 - **分母**:所有类别指数的总和,用于归一化。 --- #### 3. **直观解释** - **指数函数的作用**:通过指数运算,将较大的输入值对应到更高的概率,增强模型对“明显类别”的置信度。 - **概率化输出**:例如,输入为$z = [3, 1, -2]$,Softmax输出可能为$[0.88, 0.12, 0]$,表示模型认为第一类的概率最高。 --- #### 4. **应用场景** - **多分类任务**:如手写数字识别(10分类)、图像分类(1000类)等。 - **输出层设计**:通常与**交叉熵损失(Cross-Entropy Loss)**结合使用,简化梯度计算。 --- #### 5. **特性与优势** - **概率解释性**:输出可直接视为类别概率,便于决策。 - **梯度优化**:当Softmax与交叉熵损失联合使用时,反向传播的梯度计算更高效。 - **数值稳定性处理**:实际实现时,为避免指数爆炸(如$e^{1000}$),会对输入做平移($z_i \leftarrow z_i - \max(z)$),确保数值稳定。 --- #### 6. **局限性** - **对异常值敏感**:若某个输入$z_i$极大,Softmax会赋予它接近1的概率,其他类别接近0(“赢者通吃”)。 - **计算开销**:指数运算在大规模分类时可能较慢。 --- #### 7. **代码示例(伪代码)** ```python def softmax(z): shifted_z = z - np.max(z) # 数值稳定性处理 exp_z = np.exp(shifted_z) return exp_z / np.sum(exp_z) ``` --- #### 8. **与其他函数的对比** - **Sigmoid**:适用于二分类,输出独立概率;Softmax适用于多分类,输出互斥概率。 - **LogSoftmax**:对Softmax取对数,常与负对数似然损失(NLLLoss)结合,进一步提升数值稳定性。 --- #### 9. **实际应用建议** - **分类任务**:优先使用`Softmax + 交叉熵损失`组合。 - **多标签分类**:需改用多个Sigmoid输出。 - **框架实现**:在PyTorch中为`torch.nn.Softmax(dim=1)`,TensorFlow中为`tf.keras.activations.softmax`。 --- 通过Softmax,神经网络能够以概率形式输出分类结果,为后续的决策(如取最大概率类别)提供直观依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值