Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Challenge: Implementing Feed-Forward Networks | Побудова компонентів Transformer
Трансформери для обробки природної мови
Секція 2. Розділ 3
single

single

bookChallenge: Implementing Feed-Forward Networks

Свайпніть щоб показати меню

Досліджуючи архітектуру Transformer для обробки природної мови, ви стикаєтеся з ключовим компонентом у кожному блоці Transformer: позиційно-незалежна feed-forward мережа (FFN). Після того як механізм самоуваги обробляє вхідні представлення, FFN додатково трансформує ці представлення на кожній позиції послідовності незалежно від інших позицій. Це означає, що для кожного токена в реченні застосовується одна й та сама невелика нейронна мережа, що дозволяє моделі вводити додаткову нелінійність і навчатися складнішим шаблонам у тексті. FFN є важливою для захоплення взаємозв'язків і уточнення інформації, закодованої самоувагою, особливо при роботі з тонкощами та неоднозначностями людської мови.

123456789101112131415161718192021222324252627282930313233
import numpy as np def relu(x): return np.maximum(0, x) class PositionWiseFeedForward: def __init__(self, d_model, d_ff): # Initialize weights and biases for two linear layers self.W1 = np.random.randn(d_model, d_ff) * 0.01 self.b1 = np.zeros((1, d_ff)) self.W2 = np.random.randn(d_ff, d_model) * 0.01 self.b2 = np.zeros((1, d_model)) def __call__(self, x): # x shape: (batch_size, seq_len, d_model) # Apply first linear layer and ReLU activation out1 = relu(np.matmul(x, self.W1) + self.b1) # Apply second linear layer out2 = np.matmul(out1, self.W2) + self.b2 return out2 # Example usage: batch_size = 2 seq_len = 4 d_model = 8 d_ff = 16 # Example input: random tensor simulating text representations x = np.random.randn(batch_size, seq_len, d_model) ffn = PositionWiseFeedForward(d_model, d_ff) output = ffn(x) print("Output shape:", output.shape)
copy

У наведеному вище коді показано просту реалізацію позиційно-незалежної feed-forward мережі з використанням numpy. Мережа складається з двох лінійних перетворень (матричних множень), розділених ReLU-функцією активації.

Note
Визначення

Функція активації ReLU: Активація ReLU (Rectified Linear Unit) визначається як relu(x) = max(0, x). Вона встановлює всі від’ємні значення в нуль, а додатні залишає без змін. ReLU використовується у feed-forward мережі для введення нелінійності, що дозволяє мережі навчатися складнішим шаблонам з даних.

Перша лінійна шар проєктує вхід із розмірності d_model (розмірність вектору кожного токена) у простір вищої розмірності d_ff, що дозволяє моделі захоплювати складніші ознаки. Друга лінійна шар проєктує результат назад до початкового розміру d_model. Зверніть увагу, що ця мережа застосовується незалежно до кожної позиції у послідовності, тобто перетворення для одного токена не впливає безпосередньо на інші. Така незалежність допомагає моделі обробляти представлення кожного токена паралельно, що робить Transformers дуже ефективними для текстових даних.

Завдання

Проведіть, щоб почати кодувати

Реалізуйте функцію позиційної згортки feed-forward мережі з використанням numpy.

Визначте функцію position_wise_ffn(x, W1, b1, W2, b2), яка приймає:

  • x: масив numpy розміру (batch_size, seq_len, d_model);
  • W1: масив numpy розміру (d_model, d_ff);
  • b1: масив numpy розміру (1, d_ff);
  • W2: масив numpy розміру (d_ff, d_model);
  • b2: масив numpy розміру (1, d_model).

Для кожної позиції у послідовності застосуйте:

  • Лінійне перетворення: out1 = x @ W1 + b1;
  • ReLU-активацію: out1 = relu(out1);
  • Друге лінійне перетворення: out2 = out1 @ W2 + b2.

Поверніть вихідний масив out2 розміру (batch_size, seq_len, d_model).

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 3
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt