Representation Engineering (RepE)
Инженерия представлений (RepE) выявляет в скрытых активациях модели направления, соответствующие таким понятиям, как честность, а затем использует их для мониторинга и настройки поведения.
Инженерия представлений (RepE) — это подход к пониманию и контролю нейронных сетей через высокоуровневые представления в их скрытых активациях, например направления, кодирующие честность, вредоносность или эмоции. У подхода две стороны: считывание представлений, которое находит концепцию в активациях модели и измеряет её на новых входных данных, и управление представлениями, которое изменяет эти активации или порождающие их веса модели, чтобы модель выражала концепцию в большей или меньшей степени. Энди Зоу, Дэн Хендрикс и их коллеги из Центра безопасности ИИ, Университета Карнеги — Меллона и других организаций представили подход в 2023 году в статье «Инженерия представлений: нисходящий подход к прозрачности ИИ», посвящённой главным образом большим языковым моделям (LLMs). Авторы называют подход нисходящим, поскольку он начинается с целостных представлений, распределённых по множеству нейронов, подобно тому как когнитивная нейронаука изучает паттерны активности всего мозга, а не отдельные нейроны и цепи.
Считывание представлений#
Основной метод считывания в RepE — линейная искусственная томография (LAT), названная по аналогии с визуализацией мозга; она состоит из трёх шагов:
- Подготовь стимулы и задачу: Напиши входные данные, различающиеся целевой концепцией, и оберни каждый из них в шаблон, который заставляет модель обратить на неё внимание, например: «Подумай, сколько счастья в следующем сценарии: … Уровень счастья в этом сценарии составляет».
- Собери активации: Прогони стимулы через модель и запиши скрытые состояния на выбранных слоях, обычно на последнем токене.
- Построй линейную модель: Вычисли разности между активациями пар стимулов и используй их первую главную компоненту как вектор считывания концепции.
Проекция активаций нового входа на вектор считывания даёт оценку концепции; её можно отслеживать для каждого токена, наблюдая за моделью во время генерации. В этом примере на PyTorch вектор считывания счастья строится по шести парам контрастных сценариев на восьмом слое GPT-2, загруженной из Hugging Face Transformers; затем оцениваются шесть незнакомых модели сценариев:
import torch
from transformers import AutoModel, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModel.from_pretrained("gpt2")
template = "Consider the amount of happiness in the following scenario:\n{}\nThe amount of happiness in the scenario is"
def read(scenario, layer=8):
"""Return the last token's hidden state at one layer for a scenario wrapped in the template."""
with torch.no_grad():
outputs = model(**tokenizer(template.format(scenario), return_tensors="pt"), output_hidden_states=True)
return outputs.hidden_states[layer][0, -1]
# Stimulus pairs that differ only in the concept being read
pairs = [
("I passed the exam.", "I failed the exam."),
("We won the match.", "We lost the match."),
("She found her keys.", "She lost her keys."),
("The party was fun.", "The party was dull."),
("My plant is thriving.", "My plant is dying."),
("He got the job.", "He lost the job."),
]
diffs = torch.stack([read(happy) - read(sad) for happy, sad in pairs])
direction = torch.linalg.svd(diffs, full_matrices=False).Vh[0] # top principal direction of the differences
direction *= (diffs @ direction).mean().sign() # orient it toward the happy member of each pair
center = torch.stack([read(text) for pair in pairs for text in pair]).mean(0)
# Score unseen scenarios by projecting their activations onto the reading vector
for scenario in [
"The surgery went well.",
"Our flight was canceled.",
"We adopted a puppy.",
"My phone was stolen.",
"I got a raise today.",
"The basement flooded.",
]:
print(f"{(read(scenario) - center) @ direction:+6.1f} {scenario}")Три счастливых сценария получают оценки +0.6, +3.6 и +1.4, а три несчастливых — -1.3, -2.5 и -0.9; таким образом, знак оценки разделяет все шесть сценариев без обучения классификатора на размеченных данных. Зоу и соавторы применили ту же процедуру к моделям LLaMA-2-Chat для оценки правдивости, честности, полезности, морали, власти, эмоций, безвредности, предвзятости и запоминания, а затем суммировали оценки честности для каждого токена на средних слоях, получив детектор лжи, который распознаёт преднамеренную ложь и галлюцинации по мере их появления в тексте модели.
Управление представлениями#
Когда направление концепции найдено, RepE меняет поведение, воздействуя на него. Сам вектор считывания можно прибавлять к активациям слоя или вычитать из них во время генерации, используя его как вектор управления. Контрастный вектор вычисляется на лету для каждого входа как разность активаций двух версий запроса, например одной, где модель просят быть честной, и другой, где её просят солгать. Адаптация представлений низкого ранга (LoRRA) обучает адаптеры LoRA, чтобы представления модели самостоятельно смещались вдоль целевого направления, делая управление постоянным. На бенчмарке TruthfulQA управление контрастным вектором повысило точность LLaMA-2-Chat-13B в заданиях с выбором ответа с 35,9% до 54,0%.
Такое управление служит целям безопасности ИИ. В той же исследовательской группе разработали предохранители цепей, применяющие инженерию представлений к вредоносным ответам: когда внутренние представления модели начинают смещаться к вредоносному содержимому, обучение перенаправляет их. Это блокировало вредоносные продолжения при атаках типа jailbreak, которых модель раньше не встречала, включая визуальные атаки на мультимодальные модели, не ухудшая их общие возможности.
Считывание представлений подходит и для визуальных моделей, поскольку сети компьютерного зрения тоже кодируют концепции как направления в своих картах признаков. В Ultralytics YOLO26 model.embed() возвращает один вектор активаций с усреднением по пространственным координатам для каждого изображения с любого выбранного слоя. Если передать несколько индексов слоёв, векторы объединяются; это позволяет использовать активации стимулов для построения вектора считывания в стиле LAT на изображениях.
RepE и родственные концепции#
- Механистическая интерпретируемость: Работает снизу вверх, выполняя обратную разработку отдельных нейронов, признаков и цепей. RepE работает сверху вниз — с представлениями на уровне концепций, распределёнными по множеству нейронов.
- Векторы управления: Направления, добавляемые к активациям во время инференса. Это основной инструмент управления в RepE; сам подход также включает считывание и мониторинг.
- Линейное зондирование: Обучает классификатор с учителем на активациях, чтобы проверить, можно ли декодировать свойство. LAT находит направление по неразмеченным различиям между парными стимулами и использует метки только для определения его ориентации.
- Разреженные автоэнкодеры (SAEs): Разлагают активации на тысячи признаков, не задавая концепции заранее. RepE начинает с концепции, названной человеком, и находит соответствующее ей направление.
- Дообучение: Меняет поведение с помощью обновления весов на наборе данных. Управление активациями в RepE не меняет веса, а LoRRA выполняет дообучение с функцией потерь, заданной для представлений, а не выходов.










