Pull to refresh

Comments 18

Отличная статья! Трансформер собрали, а обучить?

Спасибо! Еще не обучала. Тестировала на случайных тезорах разных размерностей для того чтобы убедиться, что с размерностями на слоях все хорошо.

Может быть более подробным изложением? Или хотя бы программным кодом? Отличий здесь явно много. В данной статье есть математические пояснения и доработка изображений классического трансформера, которое где угодно сейчас можно уже найти. В приведённой Вами статье нет и этого. Просто "сухой гайд" с кодом и небольшими комментариями к нему.

Полагаю будет хорошим тоном, если дать ссылку на указанный пост и Ваши пояснения в начале статьи.

Не думаю, что это хорошая идея. В этом был бы смысл, если бы я так называемую "рецензию" к этой статье написал в виде комментария или хотя бы более подробно указал на различия (или дополнил статью). Я просто на самых внешних различиях акцентировал внимание, не более.

Я не понял, кто статью писал. Ты или автор.

Конечно же не я. Какие тут могут быть вообще сомнения? Достаточно посмотреть на шапку профиля, чтобы понять кто статью писал.

Статья интересная и классная, потому я решил, просто как читатель, написать свой комментарий к комментарию выше с целью ответа на вопрос "в чём же отличие этой статьи от другой", хоть и прошёлся по верхам.

Ты просто от первого лица писал, будто бы ты автор. Ну мало ли, может зашел молодой человек этой дамы, помогавший писать статью

Я вообще не понимаю, как это всё связано. Я не писал от лица автора ни в коем случае, я всегда пишу конкретно от себя. Выражаю своё мнение, не более.

По-моему, так почти все комментарии пишут, разве нет? Ну, т.е. тебя заинтересовал какой-то вопрос в комментах, а ты решил на него ответить. От себя самого, а не автора.

Перечитал, да все так. В первый раз неправильно понял

Спасибо за статью, было очень интересно и понятно читать, много нового узнал! на канал подписался, там тоже очень интересно)

балдеж! круто, очень редко вижу кто указывает названия входов QKV которые у енкодера и декодера разные, что в начале точно сбивает столку

Спасибо за статью!

Небольшой вопрос: в этой части все правильно?

        relevance = q @ k_T / math.sqrt(self.head_size)  
        # batch_size, num_heads, query_emb_len, emb_len

        if self.masked:
            mask = self.make_mask(key)
            relevance = relevance.masked_fill(~mask, -torch.inf)

Насколько я понимаю, предполагаются разные значения для query_emb_len и emb_len. То есть, в relevance не квадратная матрица, в общем случае.

А функция self.make_mask() создает квадратную матрицу по key_emb_len.

Есть некоторые сомнения, что код будет работать для разных shape у Q и K.

Вот здесь явно опечатка. Т.к. не используется out_encoder_block.

class DecoderBlock(nn.Module):
  ...
        
    def forward(self, decoder_emb, encoder_output):
      ...
        
        out_norm_1 = self.norm_1(out_add_1)
      ...
        # переиспользуем часть Encoder-а
        out_encoder_block = self.encoder_block(
            query=out_norm_1, 
            key=encoder_output, 
            value=encoder_output
        )
        # batch_size, seq_len, out_size
        
        return  out_norm_1
Sign up to leave a comment.

Articles