//Собственно, БЗ есть БД + алгоритмы, наполняющие данные смыслом.//
Вы знакомы с теорией Стивена Вольфрама о вычисляемых знаниях? Вы, кажется, именно её пытаетесь описать. Насколько мне известно, его подход действительно очень успешен, настолько, что уже странно говорить о какой-то уникальности этого подхода.
Я не могу быть знакомым с dumb bot'ом, потому что вы ничего конкретного о нём не написали.
А вот вы явно не знакомы с Ватсоном, потому что уж о нём-то конкретики масса, и она как раз напрямую об обратном: о том, что дляпоиска по базе фактов и вычисления на их основе знаний его понимания естесственного языка более, чем достаточно.
Впрочем, что мы так далеко ходим. Вы с Siri общались?
«Да, вы отрезали мне кусок хлеба, но всего лишь ножом. А вот отрежьте мне его бензопилой!».
Я-то отрежу, потому что в сколько-угодно-слойные персептроны будут всё равно входить нейроны, канонический вид которых я привёл. Проблема будет не в том, чтоб решить задачу, а в том, чтоб загасить все лишние элементы решателя, которые ему для этой задачи не нужны. Не очень перспективное занятие, на мой взгляд. Но несложное. Может, сразу скажете, как вы будете отмазываться тогда?
Это просто курам на смех. Вы утверждаете, что элемент w1*x1 + w2*x2 + b не может аппроксимировать функцию x1 + x2? На полном серьёзе?
Это не в моих правилах, но я отчаялся довести эту дискуссию до конструктива. Я только надеюсь, что любому здравомыслящему наблюдателю после этого всё уже ясно.
В моём ответе приведён весь код с комментариями, не знаю, что здесь можно не понять. Если у вас конкретные вопросы, задайте их.
Это не многослойный персептрон, это однослойны персептрон, а фактически один(!) нейрон персептрона с двумя входами и одним выходом, обучаемый обобщённым правилом Уидроу-Хоффа, то есть
градиентным спуском.
Это можно сделать без библиотек, алгебраически выход этой сети эквивалентен F(w1*x1 + w2*x2 + b), где F в нашем случае линейная функция, x1,x2 — ваши входы, веса w1,w2, b надо обучить.
Не думал, что встречу человека, который не стесняется писать о нейросетях, и которому это надо объяснять.
Вообще, никак, абсолютно неважно о чём вы пытаетесь говорить, если в первом же утверждении вы порете ерунду. В вашем примере нейросеть, обученная на каждой второй точке, да ещё зачем-то с колоссальной избыточностью, даёт точность дай бог 30% за пределами обучающей выборки, то есть пальцем в небо. Хотя должна давать ровно 100, что я и показал. Таким образом, при всех ваших умствованиях вы на практике не можете решить элементарнейшую до абсурдности задачу. Какая разница, о чём вы умствуете? Вы некомпетентны.
Скажите, а это где-то официально сказано, про высокотемпературный сверхпроводник? Потому как в фильме совершенно точно это не говорится, а я вот пришёл к тому же выводу дедуктивно и был очень горд собой.
Это действительно замечательно и я всерьёз намерен использовать это для ускорения вычислений. Жаль, правда, что такой язык не обладает полнотой, т.к. может работать только с циклами, для которых точно известно количество итераций, что даёт очень узкий класс решаемых задач (это даже не примитивно-рекурсивные, для которых известно максимальное количество итераций — ещё уже). И поэтому, наверное, языком программирования это вообще называться не может. Или я что-то проглядел?
Писать персептрон мне тоскливо, я даже своих студентов освободил от такой археологии. Поэтому берём 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]])
Тогда выход, соответственно,
Но постойте, может эта задача сродни xor, когда решение есть, но получить его сеть не может? Проверим, справится ли алгоритм обучения градиентным спуском с такой нетривиальной задачей. На вход подаём только каждое второе значение, как завещали классики.
Как видим, в финале ошибка весьма близка к нулю. Если двух десятитысячных недостаточно, обучение можно продолжить.
Интересно, какие веса установила себе сеть в процессе обучения?
Приводить результат сети графически смысла не вижу, визуально он неотличим от рисунка, приведённого выше. Думаю, хорошей проверкой может быть сравнение сумм «правильных» ответов и ответов, данных сетью:
Вы совсем двинулись на своём персептроне Розенблатта. У нормального однослойного персептрона (мёртвого уже лет 40) есть такая удивительная деталь, как сумматор. Для решения вашей задачи не нужно ничего, кроме него. Заполните матрицу весов единицами, и ошибок будет ровно ноль.
Вы знакомы с теорией Стивена Вольфрама о вычисляемых знаниях? Вы, кажется, именно её пытаетесь описать. Насколько мне известно, его подход действительно очень успешен, настолько, что уже странно говорить о какой-то уникальности этого подхода.
А вот вы явно не знакомы с Ватсоном, потому что уж о нём-то конкретики масса, и она как раз напрямую об обратном: о том, что дляпоиска по базе фактов и вычисления на их основе знаний его понимания естесственного языка более, чем достаточно.
Впрочем, что мы так далеко ходим. Вы с Siri общались?
Я-то отрежу, потому что в сколько-угодно-слойные персептроны будут всё равно входить нейроны, канонический вид которых я привёл. Проблема будет не в том, чтоб решить задачу, а в том, чтоб загасить все лишние элементы решателя, которые ему для этой задачи не нужны. Не очень перспективное занятие, на мой взгляд. Но несложное. Может, сразу скажете, как вы будете отмазываться тогда?
Остальные задачи вы ставите дальше. Я бы решал их другими методами. Но зачем, если вы не справились и с первой?
Это не в моих правилах, но я отчаялся довести эту дискуссию до конструктива. Я только надеюсь, что любому здравомыслящему наблюдателю после этого всё уже ясно.
Это не многослойный персептрон, это однослойны персептрон, а фактически один(!) нейрон персептрона с двумя входами и одним выходом, обучаемый обобщённым правилом Уидроу-Хоффа, то есть
градиентным спуском.
Это можно сделать без библиотек, алгебраически выход этой сети эквивалентен F(w1*x1 + w2*x2 + b), где F в нашем случае линейная функция, x1,x2 — ваши входы, веса w1,w2, b надо обучить.
Не думал, что встречу человека, который не стесняется писать о нейросетях, и которому это надо объяснять.
Вот это [::2] в коде как раз и означает каждую вторую точку:
<source = «Python»>
net.train(input = input[::2], target = c[::2])
Писать персептрон мне тоскливо, я даже своих студентов освободил от такой археологии. Поэтому берём python, берём Neurolab (или MATLAB и Neual Network Toolbox, портом которого Neurolab и является) и призываем персептрон без скрытых слёв, с двумя входами, одним выходом и линейной функцией активации (мы же не хотим мешать сумматору):
Проверим сначала моё предположение, и напрямую выставим нулевой сдвиг и единичные веса:
Сформируем вход:
Получили вход вида
([[ 0, 0],
[ 1, 0],
[ 2, 0],
...,
[61, 63],
[62, 63],
[63, 63]])
Тогда выход, соответственно,
Протестируем сеть:
pl.matshow(net.sim(input).reshape(shape = (64,64)))
Инджой.
Но постойте, может эта задача сродни xor, когда решение есть, но получить его сеть не может? Проверим, справится ли алгоритм обучения градиентным спуском с такой нетривиальной задачей. На вход подаём только каждое второе значение, как завещали классики.
Лог изменения ошибки:
[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]
Как видим, в финале ошибка весьма близка к нулю. Если двух десятитысячных недостаточно, обучение можно продолжить.
Интересно, какие веса установила себе сеть в процессе обучения?
Приводить результат сети графически смысла не вижу, визуально он неотличим от рисунка, приведённого выше. Думаю, хорошей проверкой может быть сравнение сумм «правильных» ответов и ответов, данных сетью:
Отличие в 2.2 на четверть миллиона. Квадратичное отклонение одна десятимиллионная. Мне кажется, close enough.
Вас кто-то очень обидел в «ИИ сообществе»?
У нейросети нет функции полезности, как бы вы её не называли.