当前位置:首页 » 《随便一记》 » 正文

第二章:AI大模型的基础知识2.2 深度学习基础2.2.2 常见的激活函数与损失函数

14 人参与  2024年02月26日 12:11  分类 : 《随便一记》  评论

点击全文阅读


AI大模型的基础知识-2.2 深度学习基础-2.2.2 常见的激活函数与损失函数

作者:禅与计算机程序设计艺术

背景介绍


近年来,深度学习(Deep Learning)技术取得了显著的进展,深度学习已被广泛应用于计算机视觉、自然语言处理、音频信号处理等领域。在深度学习中,我们需要使用激活函数(Activation Function)和损失函数(Loss Function)等数学工具。本文将详细介绍这两类函数的基础知识。

核心概念与联系


什么是激活函数?

在深度学习中,输入层、隐藏层和输出层之间通常存在一些非线性映射关系。激活函数就是用来描述这种非线性映射关系的数学函数。通过激活函数的映射,我们可以将输入的线性特征转换为高维空间中的非线性特征,从而更好地捕捉输入数据的复杂关系。常见的激活函数包括Sigmoid函数、Tanh函数、ReLU函数等。

什么是损失函数?

在深度学习中,我们需要训练一个模型,使其能够很好地拟合输入数据。为此,我们需要定义一个损失函数(Loss Function),该函数可以用来评估模型在训练集上的拟合效果。通常情况下,我们希望使损失函数的值越小越好。常见的损失函数包括均方误差(MSE)函数、交叉熵(Cross Entropy)函数等。

激活函数与损失函数的联系

激活函数和损失函数在深度学习中起着至关重要的作用。激活函数用来描述输入数据到隐藏特征的非线性映射关系,而损失函数则用来评估模型的训练效果。在训练过程中,我们通常需要优化损失函数,从而获得一个更好的模型。因此,选择适当的激活函数和损失函数是深度学习的一个关键步骤。

核心算法原理和具体操作步骤以及数学模型公式详细讲解


Sigmoid函数

Sigmoid函数是一种S形的函数,它的函数图像如下所示:

%\draw[help lines,color=gray!30, dashed] (-1.4,-1.2) grid (6.5,4.7);
\draw[->,thick] (-1.5,0) – (6.5,0) node[right] { x x x};
\draw[->,thick] (0,-0.5) – (0,4.5) node[above] { σ ( x ) \sigma(x) σ(x)};
\draw[domain=-1:5,smooth,variable=\x,blue] plot ({\x},{1/(1+exp(-(\x)))}) ;
\end{tikzpicture})

Sigmoid函数的数学表达式为:

σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1​

Sigmoid函数的导数为:

σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma^{\prime}(x)=\sigma(x)(1-\sigma(x)) σ′(x)=σ(x)(1−σ(x))

Sigmoid函数的优点是 smooth 平滑,而且输出值在 $ [0,1]$ 区间内,因此它经常被用作二分类问题中的输出函数。不过,Sigmoid函数的缺点也比较明显,即当输入值很大或很小时,sigmoid函数的梯度会趋近于0,从而导致训练变慢。

Tanh函数

Tanh函数是Sigmoid函数的一种变种,它的函数图像如下所示:

%\draw[help lines,color=gray!30, dashed] (-1.4,-1.2) grid (6.5,4.7);
\draw[->,thick] (-1.5,0) – (6.5,0) node[right] { x x x};
\draw[->,thick] (0,-1.2) – (0,1.2) node[above] { tanh ⁡ ( x ) \tanh(x) tanh(x)};
\draw[domain=-1:5,smooth,variable=\x,blue] plot ({\x},{(exp(\x)-exp(-\x))/(exp(\x)+exp(-\x))});
\end{tikzpicture})

Tanh函数的数学表达式为:

tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} tanh(x)=ex+e−xex−e−x​

Tanh函数的导数为:

tanh ⁡ ′ ( x ) = 1 − tanh ⁡ 2 ( x ) \tanh^{\prime}(x)=1-\tanh^2(x) tanh′(x)=1−tanh2(x)

Tanh函数的优点是它的输出值在 [ − 1 , 1 ] [-1,1] [−1,1] 区间内,因此它经常被用作隐藏层的激活函数。不过,Tanh函数的缺点也是比较明显的,即当输入值很大或很小时,tanh函数的梯度会趋近于0,从而导致训练变慢。

ReLU函数

ReLU函数(Rectified Linear Unit)是目前最流行的激活函数之一,它的函数图像如下所示:

%\draw[help lines,color=gray!30, dashed] (-1.4,-1.2) grid (6.5,4.7);
\draw[->,thick] (-1.5,0) – (6.5,0) node[right] { x x x};
\draw[->,thick] (0,-0.5) – (0,4.5) node[above] { max ⁡ ( 0 , x ) \max(0,x) max(0,x)};
\draw[domain=0:5,smooth,variable=\x,blue] plot ({\x},{max(\x,0)});
\end{tikzpicture})

ReLU函数的数学表达式为:

f ( x ) = max ⁡ ( 0 , x ) f(x)=\max(0,x) f(x)=max(0,x)

ReLU函数的导数为:

f ′ ( x ) = { 0 x < 0   1 x ≥ 0 f^{\prime}(x)=\begin{cases} 0 & x<0 \ 1 & x\geq0 \end{cases} f′(x)={0​x<0 1​x≥0​

ReLU函数的优点是它的计算量小,并且可以有效地缓解梯度消失问题。不过,ReLU函数的缺点也是比较明显的,即当输入值为负数时,ReLU函数的输出为0,这可能导致神经元死亡。为了克服这个问题,人们提出了Leaky ReLU和PReLU等变种函数。

MSE函数

MSE函数(Mean Square Error)是一种常见的损失函数,它的数学表达式为:

L M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L_{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_{i}-\hat{y}_{i})^{2} LMSE​=n1​i=1∑n​(yi​−y^​i​)2

其中, n n n 是样本数, y i y_{i} yi​ 是真实值, y ^ i \hat{y}_{i} y^​i​ 是预测值。MSE函数的优点是它简单易于理解,并且对异常值比较鲁棒。不过,MSE函数的缺点也是比较明显的,即它对输出的绝对误差非常敏感。

Cross Entropy函数

Cross Entropy函数是另一种常见的损失函数,它的数学表达式为:

L C E = − 1 n ∑ i = 1 n [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] L_{CE}=-\frac{1}{n}\sum_{i=1}^{n}[y_{i}\log\hat{y}_{i}+(1-y_{i})\log(1-\hat{y}_{i})] LCE​=−n1​i=1∑n​[yi​logy^​i​+(1−yi​)log(1−y^​i​)]

其中, n n n 是样本数, y i y_{i} yi​ 是真实值, y ^ i \hat{y}_{i} y^​i​ 是预测值。Cross Entropy函数的优点是它对输出的相对误差比较敏感,并且在二分类问题中比MSE函数更加合适。不过,Cross Entropy函数的缺点也是比较明显的,即它对异常值比较敏感。

具体最佳实践:代码实例和详细解释说明


Sigmoid函数的Python实现

import numpy as npdef sigmoid(x):   """   sigmoid函数的Python实现   :param x: 输入向量   :return: 输出向量   """   return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):   """   sigmoid函数的导数Python实现   :param x: 输入向量   :return: 输出向量   """   s = sigmoid(x)   return s * (1 - s)

Tanh函数的Python实现

import numpy as npdef tanh(x):   """   tanh函数的Python实现   :param x: 输入向量   :return: 输出向量   """   exp_x = np.exp(x)   exp_minus_x = np.exp(-x)   return (exp_x - exp_minus_x) / (exp_x + exp_minus_x)def tanh_derivative(x):   """   tanh函数的导数Python实现   :param x: 输入向量   :return: 输出向量   """   t = tanh(x)   return 1 - t**2

ReLU函数的Python实现

import numpy as npdef relu(x):   """   ReLU函数的Python实现   :param x: 输入向量   :return: 输出向量   """   return np.maximum(0, x)def relu_derivative(x):   """   ReLU函数的导数Python实现   :param x: 输入向量   :return: 输出向量   """   mask = x > 0   return mask * 1

MSE函数的Python实现

import numpy as npdef mse(y, y_pred):   """   MSE函数的Python实现   :param y: 真实值   :param y_pred: 预测值   :return: MSE值   """   return ((y - y_pred)**2).mean()

Cross Entropy函数的Python实现

import numpy as npdef cross_entropy(y, y_pred):   """   Cross Entropy函数的Python实现   :param y: 真实值   :param y_pred: 预测值   :return: Cross Entropy值   """   n = y.shape[0]   ce = -(np.sum(y * np.log(y_pred)) + np.sum((1-y) * np.log(1-y_pred))) / n   return ce

实际应用场景


激活函数和损失函数在深度学习中被广泛应用于计算机视觉、自然语言处理等领域。以下是几个常见的应用场景:

图像分类

在图像分类任务中,我们需要训练一个模型,使其能够识别输入图像所属的类别。为此,我们可以使用CNN(Convolutional Neural Network)模型,该模型通常包含多个卷积层、池化层和全连接层。在这种情况下,ReLU函数通常被用作隐藏层的激活函数,而Softmax函数则被用作输出层的激活函数。在训练过程中,我们可以使用交叉熵函数(Cross Entropy Loss)作为损失函数,从而获得一个更好的模型。

文本翻译

在文本翻译任务中,我们需要训练一个模型,使其能够将输入的英文文本翻译成目标语言的文本。为此,我们可以使用Seq2Seq模型,该模型通常包含一个编码器和一个解码器。在这种情况下,Tanh函数通常被用作隐藏层的激活函数,而Softmax函数则被用作输出层的激活函数。在训练过程中,我们可以使用交叉熵函数(Cross Entropy Loss)作为损失函数,从而获得一个更好的模型。

音频信号处理

在音频信号处理任务中,我们需要训练一个模型,使其能够对输入的音频信号进行处理。为此,我们可以使用RNN(Recurrent Neural Network)模型,该模型通常包含多个隐藏层。在这种情况下,Sigmoid函数或Tanh函数通常被用作隐藏层的激活函数。在训练过程中,我们可以使用均方误差函数(MSE Loss)作为损失函数,从而获得一个更好的模型。

工具和资源推荐


如果你想开始学习深度学习,以下是一些推荐的工具和资源:

TensorFlow

TensorFlow是Google开发的一个开源机器学习库,它支持多种平台,并且提供了丰富的API和工具。TensorFlow支持多种激活函数和损失函数,并且可以用于图像分类、文本分析等各种应用场景。

Keras

Keras是一个高级的 neural networks API,可以在 Python 中运行。由于 Keras 易于使用,并且提供了简单而强大的功能,它已经成为了许多初学者的首选工具。Keras 支持 TensorFlow 等多种后端框架,并且提供了丰富的 API 和工具。

PyTorch

PyTorch是 Facebook 开发的一个开源机器学习库,它支持动态计算图,并且与 NumPy 兼容。PyTorch 支持多种激活函数和损失函数,并且可以用于图像分类、文本分析等各种应用场景。

在线课程

如果你想系统地学习深度学习,以下是一些推荐的在线课程:

Coursera:Coursera 提供了大量关于深度学习的在线课程,包括 Andrew Ng 教授的“Machine Learning”课程、Stanford 大学的“Convolutional Neural Networks for Visual Recognition”课程等。edX:edX 提供了大量关于深度学习的在线课程,包括 MIT 的“Deep Learning for Self-Driving Cars”课程、Microsoft 的“Introduction to Deep Learning and Neural Networks”课程等。

总结:未来发展趋势与挑战


随着深度学习技术的不断发展,我们预计未来会看到更加先进的激活函数和损失函数。例如,人们正在研究如何设计更好的激活函数,例如 Maxout 函数和 Swish 函数等。此外,人们还在研究如何设计更加鲁棒的损失函数,例如 Huber 损失函数和 Quantile Regression 损失函数等。

然而,深度学习技术也面临着许多挑战,例如缺乏 interpretability、数据 hungry、training time 长等问题。因此,未来的研究还需要解决这些问题,从而使深度学习技术更加普适、可靠和易于使用。


点击全文阅读


本文链接:http://zhangshiyu.com/post/69969.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1