Эпох
обучения
Потери на
проверочном
наборе
T = 0
T = 0.25
T = 0.5
T = 0.75
5
2,44
"rle the the
the the the
the the the
the the the
the the the
the the the
the the the
the the the
the the the
the the the "
"te ans and
and and and
and warl
torle an at
an yawl and
tand and an
an ind an an
in thall ang
ind an tord
and and and
wa"
"te toll
nlatese ant
ann, tomdenl,
teurteeinlndti
ng fall ald
antetetell
linde ing
thathere taod
winld mlinl
theens tord y"
"p, af ane me
pfleh; fove
this?
Iretltard
efidestind
ants anl
het insethou
loellr ard,
25
1,96
"ve tray the
stanter an
truent to the
stanter to the
stanter to the
stanter to the
stanter to the
stanter to the
stanter "
"ve to the
enter an
truint to
the surt
an truin to
me truent
me the will
tray mane
but a bean
to the
stanter an
trust tra"
"ve of marter
at it not me
shank to an
him truece
preater the
beaty atweath
and that
marient shall
me the manst
on hath s"
"rd; not an an
beilloters
An bentest
the like have
bencest on it
love gray to
dreath avalace
the lien I am
sach me, m"
1
Отрывок из пьесы «Кориолан» Шекспира, акт пятый, сцена вторая. Обратите внимание,
что пример текста включает разрывы строк и обрывается посередине слова (love).
Продолжение
392
Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
Эпох
обучения
Потери на
проверочном
наборе
T = 0
T = 0.25
T = 0.5
T = 0.75
50
1,67
"rds the world
the world the
world
the world
the world the
world the
world the
world
the world
the world the
worl"
"ngs they
are their
shall the
englents
the
world the
world the
stand the
provicess
their string
shall the
world
I"
"nger of the
hath the
forgest as you
for sear
the device of
thee shall,
them at a hame,
The now the
would have bo"
"ngs, he coll,
As heirs
to me which
upon to my
light fronest
prowirness
foir.
I be chall
do vall twell.
SIR C"
100
1,61
"nd the sough
the sought
That the
more the man
the forth and
the strange as
the sought
That the
more the man
the "
"nd the
sough as the
sought
In the
consude the
more of the
princes and
show her art
the compont "
"rds as the
manner.
To the
charit and the
stranger and
house a tarron.
A tommern
the bear you
art this a
contents, "
"nd their
conswents
That thou
be three as me
a thout thou
do end,
The
longers and an
heart and not
strange.
A G"
120
1,49
"ve the strike
the strike
the strike
the strike the
strikes the
strike
And the
strike the
strike the
strike
A"
"ve the fair
brother,
And this
in the strike
my sort the
strike,
The
strike the
sound in the
dear strike
And "
"ve the
stratter for
soul.
Monty to
digning him
your poising.
This for
his brother be
this did fool.
A mock'd"
"ve of his
trusdum him.
poins
thinks him
where sudy's
such then you;
And soul
they will I
would from in
my than s"
В табл. 10.1 показаны примеры текстов при четырех различных
значениях темпе-
ратуры
— параметра, определяющего степень случайности сгенерированного текста.
Возможно, вы заметили в примерах сгенерированного текста, что при низких значе
ниях температуры текст выглядит более однообразным и менее естественным, в то
время как б
ó
льшим значениям соответствует менее предсказуемый текст. По умол
чанию максимальное значение температуры, демонстрируемое Node.jsсценарием
обучения, равно 0,75, в результате чего иногда получаются последовательности
символов, напоминающие английские слова, но на самом деле ими не являющиеся
(например,
stratter
и
poins
в приведенных в таблице примерах). Далее вы узнаете,
как температура работает и почему так называется.
Таблица 10.1
(продолжение)
Глава 10. Генеративное глубокое обучение
393
10.1.3. Температура: настройка степени стохастичности
генерируемого текста
Определять выбираемый символ на каждом шаге процесса генерации текста на
основе выдаваемых моделью вероятностей будет функция
sample()
(листинг 10.2).
Как видите, алгоритм довольно сложен и включает вызовы трех низкоуровневых
операций TensorFlow.js:
tf.div()
,
tf.log()
и
tf.multinomial()
. Почему мы исполь
зуем этот сложный алгоритм, вместо того чтобы просто брать вариант с наибольшей
оценкой вероятности, для чего хватило бы одного вызова
argMax()
?
Дело в том, что в данном случае выходной сигнал процесса генерации текста
оказался бы
детерминированным
(deterministic). Иначе говоря, при многократных
запусках результат всякий раз оказывался бы тем же самым. Все встречавшиеся нам
до сих пор глубокие нейронные сети были детерминированными в том смысле, что
для заданного входного тензора выходной тензор полностью определяется топо
логией сети и значениями весовых коэффициентов. При желании можно написать
модульный тест для контроля выходного значения (см. обсуждение тестирования
алгоритмов машинного обучения в главе 12). Подобный детерминизм для нашей
задачи генерации текста
не
лучший вариант. В конце концов, написание текста —
творческий процесс. Небольшая степень случайности сгенерированного текста
при одном и том же начальном варианте делает его интереснее. Именно для этого
и служат операция
tf.multinomial()
и параметр температуры.
tf.multinomial()
—
источник стохастичности, степень которой определяет температура.
Листинг 10.2.
Стохастическая функция выборки, с параметром температуры
Важнейшей частью функции
sample()
в листинге 10.2 является строка:
const logPreds = tf.div(tf.log(probs),
Math.max(temperature, 1e-6));
Она преобразует
probs
(вероятности на выходе модели) в
logPreds
— логарифмы
вероятностей, умноженные на определенный коэффициент. Что делают операции
взятия логарифма (
tf.log()
) и масштабирования (
tf.div()
)? Поясним на примере.
394
Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
Ради простоты допустим, что существует лишь три варианта выбора (три символа
в наборе символов). Пусть наш алгоритм предсказания очередного символа для за
данной входной последовательности выдал такие три оценки вероятностей:
[0.1, 0.7, 0.2]
Взглянем, как два различных значения температуры влияют на эти вероятности.
Для начала возьмем относительно низкое значение: 0,25. Логиты с учетом масшта
бирования:
log([0.1, 0.7, 0.2]) / 0.25 = [-9.2103, -1.4267, -6.4378]
Чтобы понять, что эти логиты значат, преобразуем их обратно в оценки вероят
ностей с помощью уравнения для многомерной логистической функции, для чего
вычислим экспоненту логитов и нормализуем их:
exp([-9.2103, -1.4267, -6.4378]) / sum(exp([-9.2103, -1.4267, -6.4378]))
= [0.0004, 0.9930, 0.0066]
Как видите, логиты для температуры 0,25 соответствуют сильно локализованно
му распределению вероятности, в котором вероятность второго варианта намного
выше, чем у остальных двух (см. второй блок на рис. 10.3).
А что, если взять температуру повыше, скажем 0,75? Повторяя те же вычисления,
получаем:
log([0.1, 0.7, 0.2]) / 0.75 = [-3.0701, -0.4756, -2.1459]
exp([-3.0701, -0.4756, -2.1459]) / sum([-3.0701, -0.4756, -2.1459])
= [0.0591, 0.7919 0.1490]
Получается распределение не с таким резким максимумом, по сравнению с пре
дыдущим, при температуре 0,25 (см. четвертый блок на рис. 10.3). Но у него все рав
но более выраженный пик, чем у исходного распределения. Как вы могли догадаться,
при температуре 1 получатся в точности исходные вероятности (см. рис. 10.3, пятый
блок). Температура выше 1 даст более «выровненное» по вариантам распределение
вероятности (см. рис. 10.3, шестой блок), хотя расстановка вариантов по местам
всегда будет одинаковой.
Эти преобразованные вероятности (точнее, их логарифмы) затем передаются
в функцию
tf.multinomial()
, выполняющую роль многогранной игральной кости
с не равновероятными гранями, что определяется входным аргументом. В результате
мы и получаем следующий символ.
Именно так параметр температуры и определяет степень стохастичности гене
рируемого текста. Термином
температура
мы обязаны термодинамике, из которой
знаем, что чем выше температура системы, тем выше степень хаоса в ней. Такая
аналогия здесь вполне уместна, ведь при повышении значения температуры в коде
получается текст более хаотичного вида. Существует золотая середина значения
температуры, ниже которой сгенерированный текст более однообразный и менее
естественный, а выше — слишком непредсказуемый и причудливый.
На этом мы завершаем экскурс в LSTM, предназначенные для генерации текста.
Обратите внимание: эта методика универсальна и применима ко многим другим
типам последовательностей, с соответствующими изменениями. Например, обучив
Do'stlaringiz bilan baham: |