word2vec python实现_Word2Vec介绍:softmax函数的python实现

1. 什么是Softmax

Softmax要解决这样一个问题:我有一个向量,想用数学方法把向量中的所有元素归一化为一个概率分布。也就是说,该向量中的元素在[0,1]范围内,且所有元素的和为1。

Softmax就是这个数学方法,本质上是一个函数。

假设我们有一个k维向量z,我们想把它转换为一个k维向量

,使其所有元素的范围是[0,1]且所有元素的和为1,函数表达式是:

也就是说,

内的每一个元素是对z内的对应元素求指数,再除以所有元素求指数后的和。所以Softmax函数也叫做归一化指数函数(normalized exponential function)。

2. Softmax用在哪里?

在“Word2Vec介绍:“自然语言处理(NLP)+深度学习”简介”文章中,介绍了生成词向量(word vector)的方法,在文章中,我们介绍了连续袋模型 (Continuous Bag of Words Model (CBOW)),该模型的方法的第五步就是将得到的“得分”转换为概率,其中用到的函数就是Softmax。当然,Softmax还有很多应用,只要抓住该函数的本质:转换为概率分布。

3. Softmax的性质

对输入x加上一个实数c后求softmax结果不变。

用公式表示就是:

,其中c是实数

这个性质的证明比较简单,读者可以自行证明。

4. Softmax的Python实现

import numpy as np

def softmax(x):

"""

对输入x的每一行计算softmax。

该函数对于输入是向量(将向量视为单独的行)或者矩阵(M x N)均适用。

代码利用softmax函数的性质: softmax(x) = softmax(x + c)

参数:

x -- 一个N维向量,或者M x N维numpy矩阵.

返回值:

x -- 在函数内部处理后的x

"""

orig_shape = x.shape

# 根据输入类型是矩阵还是向量分别计算softmax

if len(x.shape) > 1:

# 矩阵

tmp = np.max(x,axis=1) # 得到每行的最大值,用于缩放每行的元素,避免溢出

x -= tmp.reshape((x.shape[0],1)) # 利用性质缩放元素

x = np.exp(x) # 计算所有值的指数

tmp = np.sum(x, axis = 1) # 每行求和

x /= tmp.reshape((x.shape[0], 1)) # 求softmax

else:

# 向量

tmp = np.max(x) # 得到最大值

x -= tmp # 利用最大值缩放数据

x = np.exp(x) # 对所有元素求指数

tmp = np.sum(x) # 求元素和

x /= tmp # 求somftmax

return x

5. softmax测试

使用以下向量来测试:

test1 = np.array([1, 2, 3, 4])

print('原始向量:',test1)

print('经过softmax后:',softmax(test1))

得到结果如下:

原始向量: [1 2 3 4]

经过softmax后: [ 0.0320586 0.08714432 0.23688282 0.64391426]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值