В этом уроке мы продолжаем реализацию полной модели Transformer в TensorFlow. Для достижения этой цели мы реализуем Encoder и Decoder шаг за шагом.
В первом уроке мы познакомились с Трансформерами. Что они собой представляют и какие преимущества и ограничения они несут. Также мы реализовали слой PositionalEmbedding в TensorFlow.
После первого урока мы перешли ко второму уроку. Во втором уроке мы реализовали слои Add & Norm
, BaseAttention
, CrossAttention
, GlobalSelfAttention
, CausalSelfAttention
и FeedForward
.
Итак, используя слои из предыдущих уроков, мы реализуем слои Encoder
и Decoder
, которые будут использоваться для построения полной модели Transformer
.
При реализации и тестировании контента в этом руководстве я не показываю важные импортированные элементы из предыдущего руководства, поэтому, если вы тестируете все самостоятельно, следуйте предыдущему руководству, чтобы импортировать необходимый код.
Слой EncoderLayer
Начнем со слоя EncoderLayer
. Почему он называется EncoderLayer? Потому что это один слой Encoder
. Encoder
состоит из нескольких EncoderLayers
. Похожую структуру мы увидим в Decoder
:
EncoderLayer
состоит из двух подслоев: слоя MultiHeadAttention
, точнее слоя GlobalSelfAttention
, и слоя FeedForward
. Вокруг каждого из этих подслоев имеется остаточное соединение, за которым следует нормализация слоя. Остаточные соединения помогают избежать проблемы исчезновения градиента в глубоких сетях.
Давайте реализуем этот слой: