博客
关于我
深度学习关于激活函数和损失函数的调研
阅读量:715 次
发布时间:2019-03-21

本文共 2684 字,大约阅读时间需要 8 分钟。

关于激活函数和损失函数的调研

激活函数(Activation Function)

背景

深度学习的核心原理在于人工神经网络中的信号传递机制。一个神经元的输出会经过非线性激活函数处理,再传递给下一层神经元,这种非线性叠加机制使得神经网络具备了抓取复杂模式的能力。因此,激活函数在深度学习中占据了重要地位。

选择激活函数的关键在于其优化能力,而非是否能模拟真实的生物神经元。


Sigmoid 函数

Sigmoid 函数是最常用且在最早期被广泛应用的激活函数之一。

  • 函数形式

    $$σ(x) = \frac{1}{1 + e^{-x}}$$

  • 优点(Pros)

  • 可以轻松求导,具有平滑性。
  • 导数为 $σ(x)(1 - σ(x))$。
  • 缺点(Cons)

  • 易引发 gradient vanishing 问题。
  • 输出值不为 zero-centered。
  • 计算成本较高。
  • 适用场景

    适用于输出层,尤其是二分类任务等。


tanh 函数

tanh 函数是一个双曲函数,常用于解决 Sigmoid 的问题。

  • 函数形式

    $$tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$$

  • 优点(Pros)

  • 输出值 zero-centered。
  • 解决了 Sigmoid 的 gradient vanishing 问题。
  • 缺点(Cons)

  • 仍存在 gradient vanishing 和幂运算问题。
  • 变化速度较慢。
  • 适用场景

    常用于 NVIDIA 的深度学习框架中,如自然语言处理和语音识别任务。


ReLU 函数

ReLU 是当前最流行的激活函数之一。

  • 函数形式

    $$ReLU(x) = max(0, x)$$

  • 优点(Pros)

  • 大大减少了 gradient vanishing 的问题。
  • 计算速度极快,仅需判断输入值的符号。
  • 收敛速度远快于 Sigmoid 和 tanh。
  • 缺点(Cons)

  • 输出值不为 zero-centered。
  • 存在 Dead ReLU 问题(当输入值恒为负时,导数可能为 0,导致优化困难)。
  • 适用场景

    广泛应用于隐藏层和迭代模型(如 LSTMs)中。


Leaky ReLU 函数 (PReLU)

为了解决 Dead ReLU 问题,Leaky ReLU 将 ReLU 的前半段从 0 设为一个缓慢下降的线性函数。

  • 函数形式

    $$f(x) = max(0.01x, x)$$

  • 优点(Pros)

  • 保留了 ReLU 的所有优点。
  • 无 Dead ReLU 问题。
  • 缺点(Cons)

  • 需要调参以找到合适的斜率。
  • 适用场景

    与 ReLU 类似,适用于特定任务。


ELU 函数

ELU 函数(Exponential Linear Units)结合了 ReLU 和 sigmoid 的优势。

  • 函数形式

    $$f(x) = \begin{cases}
    x, & \text{if } x > 0 \
    \alpha(e^x - 1), & \text{otherwise}
    \end{cases}$$

  • 优点(Pros)

  • 无 Dead ReLU 问题。
  • 输出值 zero-centered。
  • 加速深层神经网络的训练。
  • 缺点(Cons)

  • 计算成本略高。
  • 适用场景

    适用于需要加速训练的任务。


MaxOut 函数

MaxOut 函数不仅仅是一个传统的激活函数,而是一种全新的非线性激活机制。

  • 函数形式

    $$f(x) = max(\mathbf{w}_1 \mathbf{x} + \mathbf{b}_1, \mathbf{w}_2 \mathbf{x} + \mathbf{b}_2)$$

  • 优点(Pros)

  • 在输入范围内没有饱和问题。
  • 拥有很强的拟合能力。
  • 缺点(Cons)

    1.神经元数量和参数信息翻倍,导致优化困难。

  • 适用场景

    多用于隐藏层。


损失函数(Loss Function)

0-1 损失函数

0-1 损失函数是二分类任务中最简单的损失函数之一。

  • 函数形式

    $$L(Y, f(x)) = \begin{cases}
    1, & Y \neq f(x) \
    0, & Y = f(x)
    \end{cases}$$

  • 特点

    它直接反映分类错误的个数,但其非凸性不适合大多数深度学习任务。


绝对值损失函数

绝对值损失函数常用于回归任务。

  • 函数形式

    $$L(Y, f(x)) = |Y - f(x)|$$

  • 特点

    简单且鲁棒,适合数据分布不确定的场景。


log 损失函数

log 损失函数基于对数似然原理,广泛应用于二分类和多分类任务。

  • 函数形式

    $$L(Y, P(Y|X)) = -\ln P(Y|X)$$

  • 特点

  • 可以很好地表征概率分布。
  • 对噪声敏感,不够鲁棒。

平方损失函数

平方损失函数是最常见的回归损失函数。

  • 函数形式

    $$L(Y|f(X)) = \sum_{N} (Y - f(X))^2$$

  • 特点

    经常用于回归任务,计算简单但在神经网络中较少使用。


指数损失函数

指数损失函数是一种.size:20 widely used in AdaBoost算法.

  • 函数形式

    $$L(Y|f(X)) = \exp(-y f(x))$$

  • 特点

    对离群值敏感,应用场景较为局限。


Hinge 损失函数

Hinge 损失函数最初由 SVM 引入,广泛应用于分类任务。

  • 函数形式

    $$L(y, f(x)) = \max(0, 1 - y f(x))$$

  • 特点

  • 对正样本的损失为 0。
  • 鲁棒性较高。
  • 不太适用于多分类任务。

感知损失函数

感知损失函数是 Hinge 损失函数的变种,适用于特定分类任务。

  • 函数形式

    $$L(y, f(x)) = \max(0, 1 - f(x))$$

  • 特点

    感知损失函数不关心类别边界的具体位置,模型的泛化能力较强。


交叉熵损失函数

交叉熵损失函数是深度学习中最常用的损失函数之一。

  • 函数形式

    $$\mathcal{C} = -\frac{1}{n}\sum_x [y \ln a + (1 - y) \ln (1 - a)]$$

  • 特点

  • 当用于二分类时搭配 sigmoid 激活函数,可完美解决平方损失函数的优化问题。
  • 广泛应用于二分类和多分类任务中。

总结

激活函数和损失函数是深度学习中核心组件,选择适合任务的激活函数和损失函数对模型性能至关重要。随着时间推移,不同类型的激活函数和损失函数不断演变,研究人员们在优化计算效率和模型表现方面取得了显著进展。

转载地址:http://meaez.baihongyu.com/

你可能感兴趣的文章
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>
Mysql order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql sysbench测试安装及命令
查看>>
mysql Timestamp时间隔了8小时
查看>>