当前位置: 代码迷 >> 综合 >> 7天深度学习-day2-神经网络中的概率
  详细解决方案

7天深度学习-day2-神经网络中的概率

热度:25   发布时间:2023-11-25 05:45:33.0

1、离散型与连续性

  • 一条直线能完好分割的数据,就是线性的
  • 如果一条直线不能完好分割的数据,就是非线性的

在非线性的数据里,我们需要借助误差函数(Error Function)来达到目的,误差函数越小,离目标越近。对于优化而言,连续性误差函数比离散型误差函数更好。

那如果将离散型误差函数转变成连续性误差函数了?
- 1.离散性 可以用 0或1来表示,y = 1 if x >= 0 else 0
- 2.连续性 可以用 概率 来表示,sigmoid 函数,公式为: y = 1 / (1 + exp(-x))
- 3.对于离散性的激活函数,我们用 阶跃函数(Step Function)step(Wx + b)
- 4.对于连续性激活函数,我们用 S 函数Sigmoid(Wx + b)

   激励函数,离散的阶跃函数、连续的sigmoid 函数。

 将0,1变成是概率输出,这样给出的不再是是否录取,而且录取的概率是多少。

 

2、多类别分类和 Softmax

对于之前的二分类问题,我们得到的结果要么是1,要么是0。但是如果我们希望有多个类别了?比如:结果是黄色,绿色,还是蓝色?猫,狗,还是老虎?

指数 (exp) 就是对数字进行平方运算,所以结果始终为正数

那如果有多个类别,各自的数字不一样,比如:1,2,3,那如何让他们的概率加起来等于1了?
公式就是:
概率1 = exp(1) / (exp(1) + exp(2) + exp(3))
概率2 = exp(2) / (exp(1) + exp(2) + exp(3))
概率3 = exp(3) / (exp(1) + exp(2) + exp(3))

现在该你来操作了!我们用 Python 编写 Softmax 公式吧。

import numpy as np# Write a function that takes as input a list of numbers, and returns
# the list of values given by the softmax function.def softmax(L):expL = np.exp(L) # 将L数组里的所有元素的值都进行指数运算sumExpL = sum(expL) # 对expl数组求和result = []for i in expL:result.append(i * 1.0 / sumExpL)return resultif __name__ == "__main__":L = [3, 1, 0.2]print(softmax(L))

 

3、One-Hot编码

什么是One-Hot Encoding

在数字电路的一组比特中,合法的组合值高位是1,低位是0
参考One-Hot

为什么要使用One-Hot Encoding

在机器学习领域,为了ML算法更好的运算,我们会将输入都转换成One-Hot Encoding,那就意味着,所有的输入都是1或者0,那么对于两个类别表示起来就简单了。

比如:你收到礼物就是1,没有收到就是0。
但是,假如有多个类别,有鸭子,海象,海狸,对这样的多类别进行One-Hot Encoding处理,那如何做了?如图所示,就是对每个类别分开分类,形成矩阵,然后对自己就是1,对别的类别就是0

 

4、连续型感知器

得到的是一个概率。

 5、最大似然率 Maximun Likelihood、

概率(probability)对于深度学习来说,非常重要。
对于一个好的模型来说,最大化概率,也就会最小化误差函数,这样离预测目标就更近。

6、最大化概率

最大似然率的目的是选取怎样的模型? 答:选取实际情况对应概率最大的模型,也就是说通过最大化概率选出最优的模型

7、交叉熵

对于计算概率来讲,使用对数(log)是通常是非常好的选择。即:log(ab) = log(a) + log(b)

在这里,我们要使用底数为e的对数(自然对数),而不是底数为10的对数

规律:误差大的模型使得交叉熵大,误差小的模型使得交叉熵小。

交叉熵=每个样本的概率以e为底的对数的绝对值相加。

求概率的对数是负值,对它取相反数就会得到正数,最后对它们的相反数求和,就是交叉熵
简单地说:就是对对数的负数求和,就是交叉熵。

比如,模型A和模型B的交叉熵:
模型A 0.51 + 1.61 + 2.3 + 0.36 = 4.78
模型B 0.36 + 0.1 + 0.22 + 0.51 = 1.19
事实证明模型B的交叉熵较小。 越准确的模型可以得到较低的交叉熵

误差较大的模型得到的交叉熵较高,反之,误差较小的模型得到的交叉熵较小(模型就越优)
这是因为,好模型有较高的概率,反之亦然。
所以,交叉熵可以告诉我们模型的好坏。

现在,我们的目标是,使最大化概率变为最小化交叉熵

我们得到的规律就是:概率和误差函数之间肯定有一定的联系,这种联系就叫做交叉熵。

交叉熵公式:

import numpy as npdef cross_entropy(Y, P):Y = np.float_(Y)P = np.float_(P)return -np.sum(Y * np.log(P) + (1-Y) * np.log(1-P))
if __name__ == "__main__":Y = [1, 0, 1, 1]P = [0.4, 0.6, 0.1, 0.5]print(cross_entropy(Y, P))

8、多分类别交叉熵

参考:https://blog.csdn.net/u013538542/article/details/80395454

作业:

  1. 在课程中,我们提到,在特殊情况下,softmax函数是sigmoid函数的一种对等形式,这是为什么呢?
  2. softmax函数的目标是什么?(wiki)
  3. softmax函数在神经网络中有着很大的作用,你认为一般情况下,softmax函数会被放置在神经网络的哪一层呢?
  4. one-hot编码的作用是什么呢?
  5. 请你思考一下,one-hot编码前和one-hot编码后,特征发生了怎么样的变化?
  6. 我们目前看到的one-hot编码均是针对非数字特征,但是在某些数据中,为了便于收集或其他原因,我们的值也会以数字形式表示,譬如某一数据集中对于workclass这一特征,以0,1,2来表示对应等级,在这种情况下,我们还能进行one-hot编码吗?
  7. softmax函数不仅在神经网络中起着重要作用,也以不同的形式在强化学习中起着作用,你能试着找一找吗?
  8. 多个sigmoid通过叠加也同样可以实现多分类的效果,那么这种叠加和softmax有什么不一样呢?
  9. 本章中我们介绍了交叉熵,什么是熵呢?
  10. 除了交叉熵,还有什么其他的用于神经网络分类问题的损失函数呢?
  11. 最大似然率的目的是选取怎样的模型
  12. 为什么最大化概率与最小化交叉熵是等价的
  13. 在本课中,我们使用了sigmoid函数达成从离散到连续的目标,这里面的sigmoid函数实际呗叫做激活函数,并且不止这一种,请查找一下其他常用激活函数
  14. softmax函数很好的解决了多分类问题,但当我们考虑一个分类数目很多的问题时(譬如imagenet,22000个分类),softmax还能有好的效果吗?
  15. 本课中提到的交叉熵是分类问题的损失函数,那么回归问题的损失函数有哪些呢?至少一类

 

  相关解决方案