Day 23 利用transformer自己实作一个翻译程序(五) Positional encoding

Positional encoding

Day 13 Self-attention(七) Positional Encoding、self-attention和其他model的比较中有提到说,self-attention只有input之间的相关联性,并没有位置资讯

由於文句中的位置关系是个很重要的资讯,因此这边有提到几个公式可以将文字位置加入input中

以下是位置编码的公式

公式我现在看得还没有很懂,了解了之後会再更新

def get_angles(pos, i, d_model):
  angle_rates = 1 / np.power(10000, (2 * (i//2)) / np.float32(d_model))
  return pos * angle_rates
def positional_encoding(position, d_model):
  angle_rads = get_angles(np.arange(position)[:, np.newaxis],
                          np.arange(d_model)[np.newaxis, :],
                          d_model)

  # apply sin to even indices in the array; 2i
  angle_rads[:, 0::2] = np.sin(angle_rads[:, 0::2])

  # apply cos to odd indices in the array; 2i+1
  angle_rads[:, 1::2] = np.cos(angle_rads[:, 1::2])

  pos_encoding = angle_rads[np.newaxis, ...]

  return tf.cast(pos_encoding, dtype=tf.float32)
n, d = 2048, 512
pos_encoding = positional_encoding(n, d)
print(pos_encoding.shape)
pos_encoding = pos_encoding[0]

# Juggle the dimensions for the plot
pos_encoding = tf.reshape(pos_encoding, (n, d//2, 2))
pos_encoding = tf.transpose(pos_encoding, (2, 1, 0))
pos_encoding = tf.reshape(pos_encoding, (d, n))

plt.pcolormesh(pos_encoding, cmap='RdBu')
plt.ylabel('Depth')
plt.xlabel('Position')
plt.colorbar()
plt.show()


<<:  [DAY 08] test test

>>:  网路是怎样连接的(五)Socket API

[Day20] Scrum失败经验谈 – 只想得太大太远

Scrum是大家想要导入的文化与工具,在分享了很多工具、体会和方法後,感觉是个好时机要来讲如何导入s...

Day 28 - 不想再写 if 啦,来研究 NestJS 的 Pipe 看看

我有好多 if 呀 身为一个新手後端,常常会忽略到一些细节是需要挡掉的,以这一系列在做的 Task ...

初学者跪着学JavaScript Day28 : 学迭代,学习不等待

一日客语:中文:报纸 客语:bo ziiˋ 最近很疑惑迭代物件和可迭代到底是什麽??於是查一下资料,...

[Day 1] - 前言

大家好,我是转职未满一年的工程师,听到友人推荐这项IT界的盛事,今年慕名前来参加IT邦自我挑战连续发...

[ Day 25 ] 实作一个 React.js 网站 1/5

今天来到这次铁人赛的最後一个章节:实作一个 React.js 的网站。这个网站会结合前面几天所介绍...