iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
AI & Data

Attention到底在關注什麼?系列 第 23

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 22 利用transformer自己實作一個翻譯程式(四) 輸入資料處理
下一篇
Day 24 利用transformer自己實作一個翻譯程式(六) Masking
系列文
Attention到底在關注什麼?30

尚未有邦友留言

立即登入留言