| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> GAN 的理想损失值应该是多少?(Make Your First GAN With PyTorch 附录 A) -> 正文阅读 |
|
[人工智能]GAN 的理想损失值应该是多少?(Make Your First GAN With PyTorch 附录 A) |
前面的专栏文章中,多次提到 GAN 训练的理想状态是在生成器和鉴别器之间达到平衡。
下面来计算鉴别器在达到平衡时,损失值应该是怎样的。我们同时对 均方误差 (Mean Squared Error, MSE) 和 二进制交叉熵(Binary Cross Entropy) 的损失值进行计算。 1. 均方误差损失值(MSE)均方误差损失值的定义很简单,数学定义如下: l o s s = 1 n ∑ n ( t ? o ) 2 loss = \frac{1}{n} \sum_n (t - o)^2 loss=n1?n∑?(t?o)2 其中,对 n n n 个输出节点,实际的输出为 o o o,预期的输出目标为 t t t。
对 GAN 而言,由于鉴别器仅有一个节点,上式可以简化为: l o s s = ( t ? o ) 2 loss = (t - o)^2 loss=(t?o)2
如果上式的输出为 0.5 ,意味着鉴别器 没有信心 分辨数据是真实的,或者是生成器生成的。
当目标值为 1 而输出为 0.5 时,单纯的 误差(error) 为 0.5;类似的,当目标值为 0 时, 单纯的 误差(error) 值也为 -0.5。
所以 平衡的 GAN 对应的均方误差值(MSE)是 0.25。 2. 二进制交叉熵损失值(BCE)二进制交叉熵损失值(Binary Cross Entropy, BCE)基于可能性和不确定性的概念,让我们一步步的说明。 2.1 从概率说起考虑 MNIST 分类器,该网络有 10 个输出节点,每个节点对应一个可能的分类。 如果已训练好的分类器网络认为某个图像是数字 4,那么第四个输出节点将有较高的输出, 其他的节点输出值则较小。
观察下面的表格,显示了节点输出值 x 和预期输出值 y 的例子:
2.2 熵是什么?熵(Entropy) 是用来形容不确定性的数学概念。
熵的数学定义如下所示: e n t r o p y = ∑ ? p ? l n ( p ) entropy = \sum -p \cdot ln(p) entropy=∑?p?ln(p) 上式中,使用求和遍历了所有可能的结果,而 p p p 是每个结果的概率。
针对掷硬币获得 “字” 的概率,下图显示了由上面表达式计算的熵:
看完原理后,我们对硬币两面都是 “字” 的情况(也就是 p ( h e a d ) = 1 p(head)=1 p(head)=1)进行计 算: e n t r o p y = ∑ ? p ? l n ( p ) = ? 1 ? l n ( 1 ) ? 0 ? l n ( 0 ) = 0 entropy = \sum -p \cdot ln(p) = -1 \cdot ln(1) - 0 \cdot ln(0) = 0 entropy=∑?p?ln(p)=?1?ln(1)?0?ln(0)=0 上面式子中,计算了掷硬币结果是 “字” 和 “花” 的所有情况。
所以式子计算的结果与上图中 p ( h e a d ) = 1 p(head)=1 p(head)=1 时熵为 0 的结果一致。 对于一个正常的硬币,由于 p ( h e a d ) = 0.5 p(head)=0.5 p(head)=0.5 而且 p ( t a i l ) = 0.5 p(tail)=0.5 p(tail)=0.5,完成熵的计算,获得最大熵的值。 2.3 交叉熵从上一节看到,熵是表述输出不确定性的一个方法。 而 交叉熵(cross entropy),是对由于实际输出的可能性与我们认为 上面这句话听起来很抽象,让我们回到硬币的例子来说明。
所以,我们可以认为交叉熵是两个概率分布之间的一个比较,如果两个分布越匹配,交叉熵就越低;相反,如果两个概率分布完全比配,那么交叉熵就为 0。 那交叉熵和神经网络有什么关系呢? 由于网络的目标输出和实际输出都是概率分布:
这也是我们希望损失函数所完成的。 下面的表达式从数学上定义了交叉熵: 上式的求和是对所有可能的分类进行,其中 x x x 是观测到的各分类的概率,而 y y y 是各分类的实际概率。 使用前面的神经网络的例子进行计算,对实际输出 x x x 概率为 0.9,但是期望输出概率为 1.0 的情况,对所有可能的分类概率(也就是 1.0 和 0.0)求和: c r o s s e n t r o p y = ∑ ? y ? l n ( x ) = ? 1 ? l n ( 0.9 ) ? 0 ? l n ( 1 ? 0.9 ) = 0.105 crossentropy = \sum - y \cdot ln(x) = -1 \cdot ln(0.9) - 0 \cdot ln(1-0.9) = 0.105 crossentropy=∑?y?ln(x)=?1?ln(0.9)?0?ln(1?0.9)=0.105 同样的,对另一个实际输出概率为 0.1,但期望为 1.0 的情况进行计算: c r o s s e n t r o p y = ∑ ? y ? l n ( x ) = ? 1 ? l n ( 0.1 ) ? 0 ? l n ( 1 ? 0.1 ) = 2.303 crossentropy = \sum - y \cdot ln(x) = -1 \cdot ln(0.1) - 0 \cdot ln(1-0.1) = 2.303 crossentropy=∑?y?ln(x)=?1?ln(0.1)?0?ln(1?0.1)=2.303 下标是这些结果的总结,我增加了额外的一行:
严格来说,我们可以用任何损失函数来惩罚错误的输出。某些人可能偏向使用交叉熵,关键的原因是它更强烈的惩罚错误的输出。 下图显示了期望值为 1.0 的情况下,对不同的观测输出使用交叉熵计算获得的 损失值图表:
2.4 二进制交叉熵二进制交叉熵(Binary Cross Entropy, BCE) 是仅有两个分类的交叉熵,这种情况也是鉴别器输出分类为真实的 1.0 和虚假的 0.0。
当鉴别器在对真实和生成的数据分类同样坏时,其输出将总为 0.5,也就是这些 输出一些为 1.0,另一些为 0.0。 对于 x = 0.5 x=0.5 x=0.5 和 y = 1.0 y=1.0 y=1.0,计算交叉熵: c r o s s e n t r o p y = ∑ ? y ? l n ( x ) = ? 1 ? l n ( 0.5 ) ? 0 ? l n ( 1 ? 0.5 ) = 0.693 crossentropy = \sum - y \cdot ln(x) = - 1 \cdot ln(0.5) - 0 \cdot ln (1 - 0.5) = 0.693 crossentropy=∑?y?ln(x)=?1?ln(0.5)?0?ln(1?0.5)=0.693 对于 x = 0.5 x=0.5 x=0.5 和 y = 0.0 y=0.0 y=0.0,计算交叉熵: c r o s s e n t r o p y = ∑ ? y ? l n ( x ) = ? 0 ? l n ( 0.5 ) ? 1 ? l n ( 1 ? 0.5 ) = 0.693 crossentropy = \sum - y \cdot ln(x) = - 0 \cdot ln(0.5) - 1 \cdot ln (1 - 0.5) = 0.693 crossentropy=∑?y?ln(x)=?0?ln(0.5)?1?ln(1?0.5)=0.693
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:26:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |