Основное применение однократного кодирования заключается в представлении символов с векторами без какого-либо предварительного смещения. «книга», «яблоко», «библиотека» являются символическими представлениями без каких-либо измеримых значений.
Есть два места, где мы используем горячее кодирование в нейронных сетях:
1. кодирование входов 2. кодирование прогнозируемых выходов.
Входы нейронных сетей известны как представления функций, а выходы работают как компоненты инструментов поиска (найдите значение в индексе i
). Но я хотел бы доказать, что оба на самом деле являются инструментами для операции поиска.
Наиболее важные свойства, которые нейронные сети ищут в любой вычислительной операции: 1. дифференцируемость и 2. распараллеливание с графическими процессорами. Операция поиска, если она выполняется как индексация элементов и нахождение их на основе целочисленного индекса, не является дифференцируемой операцией, и ее невозможно легко выполнить параллельно, но если элементы, подвергаемые этой операции, являются векторами, индексы могут быть представленными как горячие векторы, а операции поиска могут быть простым матричным умножением вектора векторов (матрица чисел) и горячим представлением индексов. Эта операция умножения может быть как распараллеливаемой, так и дифференцируемой.
Когда вы представляете входное слово с однократным кодированием x
, результат умножения его на матрицу W
работает как операция поиска (это то, что мы знаем как слой встраивания), и если выходные метки y
с однократным кодированием умножения выходных данных y'
и транспонирования y
- это точное значение в заданном индексе (обычно это вероятность или логит предсказания метки). Такое представление не всегда является оптимальным способом для этого, поэтому в современных системах часто встречаются «редкие» альтернативы: например, sparse_categorical_crossentropy
для выходных данных.