2015-10-30 4 views
3

В инструменте машинного обучения vowpal wabbit (https://github.com/JohnLangford/vowpal_wabbit/) обычно проводится линейная оценка y * = wx. Однако можно добавить передний нерв.Vowpal Wabbit: Ввод нейронной сети?

Мой вопрос: когда я использую нейронную сеть по опции командной строки «-nn x», линейная оценка wx полностью заменена нейронной сетью?

Редактировать: Thanks Martin and arielf. Так apperently различные созвездия выглядеть следующим образом:

enter image description here

Вес моделей с «--nn» оценивается обратным распространением?

+0

Спасибо так много для работы на диаграммах. Это делает все яснее. Маркировка краев NN-графа с соответствующими весами в моделях 'wF [N]' (которые, как упоминал Мартин в комментариях, не все представлены на выходе '--invert-hash'), сделают его еще более понятным. 'wF [N]' - это вес от функции 'F' до уровня узла' N'. Массы от скрытого слоя до выходного узла, по-видимому, не отображаются в '--invert-hash'. – arielf

ответ

4

[Редактировать: исправить ответ: оригинал не был точным, благодаря Мартин]

1-слой Н.Н. питает вход особенности в слой NN (все возможные взаимодействия), которые затем подают в выходном слое ,

Чтобы добавить сквозные функции как есть, без взаимодействия, вы должны добавить опцию --inpass.

Вы можете посмотреть на модели, созданной с помощью --invert_hash, чтобы получить читаемую модель на небольшой примере:

$ cat dat.vw 
1 | a b 
2 | a c 

# default linear model, no NN: 
$ vw --invert_hash dat.ih dat.vw 
... 

$ cat dat.ih 
... 
:0 
Constant:116060:0.387717 
a:92594:0.387717 
b:163331:0.193097 
c:185951:0.228943 

# Now add --nn 2 (note double-dash in long option) 
# to use a 1-layer NN with 2 nodes 
$ vw --nn 2 --invert_hash dat-nn.ih dat.vw 
... 

$ cat dat-nn.ih 
... 
:0 
Constant:202096:-0.270493 
Constant[1]:202097:0.214776 
a:108232:-0.270493 
a[1]:108233:0.214776 
b:129036:-0.084952 
b[1]:129037:0.047303 
c:219516:-0.196927 
c[1]:219517:0.172029 

выглядит как a[N] является вкладом a к скрытому слою NN узлу N (начиная с основанием/нулевой индекс, по-видимому, автономная нотация a немного запутанна).

При добавлении --inpass вы получаете дополнительный вес на функции (индекс [2]):

$ vw --nn 2 --inpass --invert_hash dat-nn-ip.ih dat.vw 
... 
$ cat dat-nn-ip.ih 
... 
:0 
Constant:202096:-0.237726 
Constant[1]:202097:0.180595 
Constant[2]:202098:0.451169 
a:108232:-0.237726 
a[1]:108233:0.180595 
a[2]:108234:0.451169 
b:129036:-0.084570 
b[1]:129037:0.047293 
b[2]:129038:0.239481 
c:219516:-0.167271 
c[1]:219517:0.139488 
c[2]:219518:0.256326 
+0

Я думал, что оригинальные функции используются только с '--inpass' (я не могу проверить его прямо сейчас). –

+0

Интересно, что '--inpass' добавляет еще 3 функции к модели' a [2] ',' b [2] 'и' c [2] '. Я не уверен, что именно они имеют в виду. – arielf

+1

Я коротко проверил исходный код nn.cc. С '--nn N' мы имеем N единиц в скрытом слое и N параметров для каждой функции, которые находятся в' --invert_hash', отмеченные как, например. 'a' и' a [1] '. Затем есть еще N дополнительных параметров для уровня вывода (соединения между N скрытыми единицами и модулем вывода окончательного прогноза), но, к сожалению, они не сообщаются в '--audit' и' --invert_hash'. Итак, для функций F нам нужно настроить параметры F * N + N, но только параметры F * N показаны в модели '--invert_hash'. –

Смежные вопросы