В этом уроке мы продолжаем реализацию полной модели 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. Вокруг каждого из этих подслоев имеется остаточное соединение, за которым следует нормализация слоя. Остаточные соединения помогают избежать проблемы исчезновения градиента в глубоких сетях.

Давайте реализуем этот слой: