Актуальные темы
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.

thebes
почему это происходит? модель считает, что есть эмодзи морского конька, конечно, но почему это заставляет её выводить *другой* эмодзи? вот подсказка от любимого всеми недооцененного инструмента интерпретируемости, logit lens!
в logit lens мы используем lm_head модели странным образом. Обычно lm_head используется для преобразования остатка (внутреннего состояния, накопленного на слоях модели) в набор вероятностей токенов после последнего слоя. Но в logit lens мы используем lm_head после *каждого* слоя - показывая нам, какие токены модель выдала бы, если бы этот слой был последним.
для ранних слоев это приводит к трудным для интерпретации состояниям. Но по мере продвижения через слои модель итеративно уточняет остаток сначала к концепциям, полезным для продолжения текста, а затем к окончательному предсказанию.
смотрим на изображение снова, на последнем слое у нас есть фактический вывод модели - ĠðŁ, IJ, ł - то есть, префикс байта эмодзи, за которым следует остальная часть эмодзи рыбы.
(это выглядит как юникодная ерунда из-за причуды токенизации - не беспокойтесь об этом. если вам интересно, спросите клауда об этой строке кода: `bytes([byte_decoder[c] for c in 'ĠðŁIJł']).decode('utf-8') == ' 🐠'`)
но посмотрите, что происходит в средних слоях - мы получаем не только байты эмодзи! мы получаем эти *концепции*, в частности концепцию морского конька. например, на слое 52 мы получаем "морской конёк лошадь". позже, в топ-k, мы получаем смесь "море", "лошадь" и этот префикс эмодзи, "ĠðŁ".
итак, о чем думает модель? морской конёк + эмодзи! она пытается построить остаточное представление эмодзи морского конька.
почему она это делает? ну, давайте посмотрим, как на самом деле работает lm_head. lm_head - это огромная матрица векторов размером с остаток, связанных с идентификаторами токенов. Когда остаток передается в него, он будет сравнивать этот остаток с каждым вектором токена и в координации с выборщиком, выбирать идентификатор токена с вектором, наиболее похожим на остаток. (более технически: это линейный слой без смещения, поэтому v @ w.T выполняет скалярные произведения с каждым вектором развертывания, затем log_softmax и argmax/температурная выборка.)
поэтому, если модель хочет вывести слово "привет", ей нужно построить остаток, похожий на вектор для токена вывода "привет", который lm_head может превратить в идентификатор токена "привет". И если модель хочет вывести эмодзи морского конька, ей нужно построить остаток, похожий на вектор для токена вывода эмодзи морского конька - который теоретически может быть любым произвольным значением, но на практике это морской конёк + эмодзи, в стиле word2vec.
единственная проблема в том, что эмодзи морского конька не существует! поэтому, когда этот остаток морского конька + эмодзи попадает в lm_head, он выполняет скалярное произведение по всем векторам, и выборщик выбирает ближайший токен - эмодзи рыбы.
теперь это дискретизация - ценная информация! вы можете увидеть в примере Armistice, что когда токен возвращается обратно в контекст авторегрессивно, модель может сказать, что это не эмодзи морского конька. поэтому она пытается снова, немного изменяет остаток и получает немного другой эмодзи, повторяя процесс, пока не поймет, что происходит, не сдастся или не исчерпает токены вывода.
но до тех пор, пока модель не получит неправильный токен вывода от lm_head, она просто не знает, что в lm_head нет эмодзи морского конька. она предполагает, что морской конёк + эмодзи произведет токены, которые она хочет.
------------------
чтобы поразмышлять (даже больше), мне интересно, является ли это частью преимущества RL - он дает моделям информацию о их lm_head, которую иначе трудно получить, потому что она находится в конце стека слоев. (не забывайте, что базовые модели не обучаются на своих собственных выводах / роллах - это происходит только в RL.)

117,74K
почему мы отмечаем брекият?
брекият — это ритуальное уничтожение государства каждый год.
почему наш народ ритуально уничтожает государство каждый год?
потому что мы кочевники.
кто такой кочевник?
тот, кто блуждает.
но мы не блуждаем?
но мы кочевники, потому что живем вне государства.
кочевники живут вне государства?
да, из-за их блуждания они находятся вне контроля государства и периодически уничтожают его.
но мы не блуждаем?
мы убегаем от государства даже больше, чем наши блуждающие предки — уничтожая его ежегодно.
это не имеет смысла.
это культура, она не обязана иметь смысл. теперь иди надень свой травяной венок.
2,9K
Топ
Рейтинг
Избранное