Обновить
26
0
Богдан Колчигин@ererer

Пользователь

Отправить сообщение
//Собственно, БЗ есть БД + алгоритмы, наполняющие данные смыслом.//


Вы знакомы с теорией Стивена Вольфрама о вычисляемых знаниях? Вы, кажется, именно её пытаетесь описать. Насколько мне известно, его подход действительно очень успешен, настолько, что уже странно говорить о какой-то уникальности этого подхода.
Я не могу быть знакомым с dumb bot'ом, потому что вы ничего конкретного о нём не написали.

А вот вы явно не знакомы с Ватсоном, потому что уж о нём-то конкретики масса, и она как раз напрямую об обратном: о том, что дляпоиска по базе фактов и вычисления на их основе знаний его понимания естесственного языка более, чем достаточно.

Впрочем, что мы так далеко ходим. Вы с Siri общались?
«Да, вы отрезали мне кусок хлеба, но всего лишь ножом. А вот отрежьте мне его бензопилой!».

Я-то отрежу, потому что в сколько-угодно-слойные персептроны будут всё равно входить нейроны, канонический вид которых я привёл. Проблема будет не в том, чтоб решить задачу, а в том, чтоб загасить все лишние элементы решателя, которые ему для этой задачи не нужны. Не очень перспективное занятие, на мой взгляд. Но несложное. Может, сразу скажете, как вы будете отмазываться тогда?
Уж что-что, а задачу вы сформулировали предельно чётко. Посчитать нейросетью сумму двух чисел. Я смог, вы нет. Problems?

Остальные задачи вы ставите дальше. Я бы решал их другими методами. Но зачем, если вы не справились и с первой?
Зачем вам скрытый слой, если с этой задачей справляется один нейрон?
Уверяю вас, в Watson всё ЗНАЧИТЕЛЬНО сложнее. Ознакомтесь, всё в открытых источниках и очень увлекательно.
Это просто курам на смех. Вы утверждаете, что элемент w1*x1 + w2*x2 + b не может аппроксимировать функцию x1 + x2? На полном серьёзе?

Это не в моих правилах, но я отчаялся довести эту дискуссию до конструктива. Я только надеюсь, что любому здравомыслящему наблюдателю после этого всё уже ясно.
В моём ответе приведён весь код с комментариями, не знаю, что здесь можно не понять. Если у вас конкретные вопросы, задайте их.

Это не многослойный персептрон, это однослойны персептрон, а фактически один(!) нейрон персептрона с двумя входами и одним выходом, обучаемый обобщённым правилом Уидроу-Хоффа, то есть
градиентным спуском.

Это можно сделать без библиотек, алгебраически выход этой сети эквивалентен F(w1*x1 + w2*x2 + b), где F в нашем случае линейная функция, x1,x2 — ваши входы, веса w1,w2, b надо обучить.
Не думал, что встречу человека, который не стесняется писать о нейросетях, и которому это надо объяснять.
Я так и сделал, читайте внимательней.

На вход подаём только каждое второе значение, как завещали классики.


Вот это [::2] в коде как раз и означает каждую вторую точку:
<source = «Python»>
net.train(input = input[::2], target = c[::2])
Вообще, никак, абсолютно неважно о чём вы пытаетесь говорить, если в первом же утверждении вы порете ерунду. В вашем примере нейросеть, обученная на каждой второй точке, да ещё зачем-то с колоссальной избыточностью, даёт точность дай бог 30% за пределами обучающей выборки, то есть пальцем в небо. Хотя должна давать ровно 100, что я и показал. Таким образом, при всех ваших умствованиях вы на практике не можете решить элементарнейшую до абсурдности задачу. Какая разница, о чём вы умствуете? Вы некомпетентны.
Скажите, а это где-то официально сказано, про высокотемпературный сверхпроводник? Потому как в фильме совершенно точно это не говорится, а я вот пришёл к тому же выводу дедуктивно и был очень горд собой.
Планету может и не развернёт, но вот вибрации основы всю рыбу на 1000 км распугают.
Это действительно замечательно и я всерьёз намерен использовать это для ускорения вычислений. Жаль, правда, что такой язык не обладает полнотой, т.к. может работать только с циклами, для которых точно известно количество итераций, что даёт очень узкий класс решаемых задач (это даже не примитивно-рекурсивные, для которых известно максимальное количество итераций — ещё уже). И поэтому, наверное, языком программирования это вообще называться не может. Или я что-то проглядел?
Пруф.

Писать персептрон мне тоскливо, я даже своих студентов освободил от такой археологии. Поэтому берём python, берём Neurolab (или MATLAB и Neual Network Toolbox, портом которого Neurolab и является) и призываем персептрон без скрытых слёв, с двумя входами, одним выходом и линейной функцией активации (мы же не хотим мешать сумматору):

import neurolab as nl
import numpy as np
import matplotlib.pyplot as pl

net = nl.net.newff(minmax = [[0,64],[0,64]], size = [1], transf = [nl.trans.Purelin()])


Проверим сначала моё предположение, и напрямую выставим нулевой сдвиг и единичные веса:
nl.tool.np_set(net, np.array([0,1,1])


Сформируем вход:

m,n = range(64), range(64)
input = [[[a, b] for a in m] for b in n]
input = np.array(input).reshape(shape = (64*64, 2))


Получили вход вида
([[ 0, 0],
[ 1, 0],
[ 2, 0],
...,
[61, 63],
[62, 63],
[63, 63]])
Тогда выход, соответственно,

c = np.sum(input, axes = 1)

Протестируем сеть:

pl.matshow(net.sim(input).reshape(shape = (64,64)))

Инджой.

Но постойте, может эта задача сродни xor, когда решение есть, но получить его сеть не может? Проверим, справится ли алгоритм обучения градиентным спуском с такой нетривиальной задачей. На вход подаём только каждое второе значение, как завещали классики.

net = nl.net.newff(minmax = [[0,64],[0,64]], size = [1], transf = [nl.trans.Purelin()]) #reinitialize
net.train(input = input[::2], target = c[::2])

Лог изменения ошибки:

[4.3691578041483729e+65,
1.563153950598895e+64,
5.6836071277516877e+62,
2.9769819329424415e+61,
1.0504650257071223e+61,
9.8143560445701035e+60,
9.7779400880300074e+60,
5.9248762109972475e+41,
5.8088683355000359e+39,
5.6453929138802899e+39,
8.7363656588584911e+19,
4.0091994306583206e+17,
3.443965887101271e+17,
0.014586921973431978,
0.0029031555951286657]

Как видим, в финале ошибка весьма близка к нулю. Если двух десятитысячных недостаточно, обучение можно продолжить.
Интересно, какие веса установила себе сеть в процессе обучения?

>>> nl.tool.np_get(net)
array([-0.00526347,  1.0000747 ,  1.00008568])


Приводить результат сети графически смысла не вижу, визуально он неотличим от рисунка, приведённого выше. Думаю, хорошей проверкой может быть сравнение сумм «правильных» ответов и ответов, данных сетью:
>>> sum(c)
258048
>>> sum(net.sim(input))
258050.20745549328


Отличие в 2.2 на четверть миллиона. Квадратичное отклонение одна десятимиллионная. Мне кажется, close enough.
Вы совсем двинулись на своём персептроне Розенблатта. У нормального однослойного персептрона (мёртвого уже лет 40) есть такая удивительная деталь, как сумматор. Для решения вашей задачи не нужно ничего, кроме него. Заполните матрицу весов единицами, и ошибок будет ровно ноль.

Вас кто-то очень обидел в «ИИ сообществе»?
Вам в политику надо.
О да, это моя ужасная проблема. Главное, что не ваша.
У нейросети нет функции полезности, как бы вы её не называли.
Да, я искренне надеюсь, что никогда не сочту, что достаточно выучился. Особенно в ваших глазах.
Надеюсь, этого никогда не случится.

Информация

В рейтинге
Не участвует
Откуда
Украина
Дата рождения
Зарегистрирован
Активность