1
Общение / Постановка целей для искусственного интеллекта
« : 06 Декабря 2021, 18:39 »
Достаточно давно работаю над различными ИИ класса "обучение с подкреплением". То есть над "достигателями целей", "машинами результатов".
В теории всё вроде понятно, на практике модели обучаются туго, но вопрос не в этом. Как вообще можно сформулировать задачу для ИИ? Задачу, касающуюся реального мира, вроде "сделай, чтобы у меня на столе был кг золота" или "сделай, чтобы вот этот больной человек стал здоровым".
Ведь ИИ - не человек, с которым можно поговорить. Это система автоматического управления в незнакомой среде.
Вообще, какие есть известные варианты задания цели?
1) Через подкрепление. Мы можем сделать, чтобы ИИ получал сигнал подкрепления и старался делать то, что этот сигнал будет максимизировать. Таким образом можно обучить его достижению любой цели, но он потратит огромную кучу времени, даже чтобы просто выяснить, чего мы от него хотим. И даже если мы будет очень хорошо понимать, за что давать подкрепления, а за что - нет, то всё равно передать ему эту функцию цели - задолбаешься. То есть допустим мы хотим, чтобы ИИ, будучи помещённым в Doom, открыл на карте жёлтую дверь. Каким бы умным он ни был, и как бы ни понимал игру, ему всё равно придётся искать ту комбинацию действий, что приведёт к награде, а потом ещё разбираться, а что конкретно дало награду, потому что в кадре в этот момент много всего было.
2) Явно показать цель. Делаем ИИ, который будет явно просчитывать траекторию, и делаем функцию, которая оценивает предсказанные им кадры. Плюс к том, что мы можем сделать кучу кадров жёлтой двери, открытой и закрытой, и на этих кадрах разметить датасет для предсказания наград. Либо мы даже можем подать ему в качестве цели скриншот с полуоткрытой жёлтой дверью. Тогда ИИ в крайнем случае сможет перебрать траектории "в уме" и найти ту, которая приведёт к открытию этой двери. Без того, чтобы ставить кучу опытов на территории.
3) Сделать некий язык описания целей. ИИ всё так же явно предсказывает свои траектории, но на этот раз оценщик траекторий устроен иначе. Это некая нейросеть, которая по описанию цели и кадру выдаёт сигнал награды. Например, оценщик понимает такие слова, как дверь, жёлтая, открыть. И ещё пару десятков слов. И у него в датасете есть пары: [дверь, синяя, открыть] (и кадр синей открываемой двери) - и сигнал награды 1. [дверь, красная, открыть] (и кадр жёлтой открываемой двери) - и сигнал награды 0. И много тому подобных пар. В общем, оценщик обучен на них, и может, имея описание цели, понять, достигнута ли она.
Но в реальности у нас ситуация будет ещё сложнее, чем в игре. В реальности, если у нас будет сильный (то есть работающий в +- любом энвайронменте, а не человекоподобный) ИИ, то какие задачи мы ему захотим ставить? Те, которые сами не тянем. Излечить человека, построить ракету до Альфы Центавра, сделать передо мной килограмм золота. Как такую цель сформулировать, имея довольно небогатый арсенал средств общения с ИИ?
Я пытался запустить такое обсуждение на хабре, но результат меня не вдохновил.
https://habr.com/ru/post/538522/
Отдельно есть ещё вопрос. Вот есть у нас, допустим, самоулучшающийся ИИ. Как ставить задачи ему?
Когда я задаюсь вопросом, как вообще такой ИИ сделать, получается, что одна и та же архитектура должна решать и задачи динамической оптимизации (ну то есть задачи управления), и задачи статической оптимизации (что-то вроде задачи эволюции или градиентного спуска). Это ощутимо разные задачи, в динамической задаче у нас есть ось времени, и мы не можем попасть в прошлое. В статической же задаче у нас огромное число наблюдаемых и управляемых переменных - миллион для небольшой нейросети. Для того, чтобы ИИ улучшил себя, он должен решать статическую задачу, а чтобы он чем-то управлял, он должен решать задачу динамическую. И единственная величина, которая мне видится общей для обеих задач - это сигнал подкрепления. То есть как сделать явную постановку цели - неочевидно.
В теории всё вроде понятно, на практике модели обучаются туго, но вопрос не в этом. Как вообще можно сформулировать задачу для ИИ? Задачу, касающуюся реального мира, вроде "сделай, чтобы у меня на столе был кг золота" или "сделай, чтобы вот этот больной человек стал здоровым".
Ведь ИИ - не человек, с которым можно поговорить. Это система автоматического управления в незнакомой среде.
Вообще, какие есть известные варианты задания цели?
1) Через подкрепление. Мы можем сделать, чтобы ИИ получал сигнал подкрепления и старался делать то, что этот сигнал будет максимизировать. Таким образом можно обучить его достижению любой цели, но он потратит огромную кучу времени, даже чтобы просто выяснить, чего мы от него хотим. И даже если мы будет очень хорошо понимать, за что давать подкрепления, а за что - нет, то всё равно передать ему эту функцию цели - задолбаешься. То есть допустим мы хотим, чтобы ИИ, будучи помещённым в Doom, открыл на карте жёлтую дверь. Каким бы умным он ни был, и как бы ни понимал игру, ему всё равно придётся искать ту комбинацию действий, что приведёт к награде, а потом ещё разбираться, а что конкретно дало награду, потому что в кадре в этот момент много всего было.
2) Явно показать цель. Делаем ИИ, который будет явно просчитывать траекторию, и делаем функцию, которая оценивает предсказанные им кадры. Плюс к том, что мы можем сделать кучу кадров жёлтой двери, открытой и закрытой, и на этих кадрах разметить датасет для предсказания наград. Либо мы даже можем подать ему в качестве цели скриншот с полуоткрытой жёлтой дверью. Тогда ИИ в крайнем случае сможет перебрать траектории "в уме" и найти ту, которая приведёт к открытию этой двери. Без того, чтобы ставить кучу опытов на территории.
3) Сделать некий язык описания целей. ИИ всё так же явно предсказывает свои траектории, но на этот раз оценщик траекторий устроен иначе. Это некая нейросеть, которая по описанию цели и кадру выдаёт сигнал награды. Например, оценщик понимает такие слова, как дверь, жёлтая, открыть. И ещё пару десятков слов. И у него в датасете есть пары: [дверь, синяя, открыть] (и кадр синей открываемой двери) - и сигнал награды 1. [дверь, красная, открыть] (и кадр жёлтой открываемой двери) - и сигнал награды 0. И много тому подобных пар. В общем, оценщик обучен на них, и может, имея описание цели, понять, достигнута ли она.
Но в реальности у нас ситуация будет ещё сложнее, чем в игре. В реальности, если у нас будет сильный (то есть работающий в +- любом энвайронменте, а не человекоподобный) ИИ, то какие задачи мы ему захотим ставить? Те, которые сами не тянем. Излечить человека, построить ракету до Альфы Центавра, сделать передо мной килограмм золота. Как такую цель сформулировать, имея довольно небогатый арсенал средств общения с ИИ?
Я пытался запустить такое обсуждение на хабре, но результат меня не вдохновил.
https://habr.com/ru/post/538522/
Отдельно есть ещё вопрос. Вот есть у нас, допустим, самоулучшающийся ИИ. Как ставить задачи ему?
Когда я задаюсь вопросом, как вообще такой ИИ сделать, получается, что одна и та же архитектура должна решать и задачи динамической оптимизации (ну то есть задачи управления), и задачи статической оптимизации (что-то вроде задачи эволюции или градиентного спуска). Это ощутимо разные задачи, в динамической задаче у нас есть ось времени, и мы не можем попасть в прошлое. В статической же задаче у нас огромное число наблюдаемых и управляемых переменных - миллион для небольшой нейросети. Для того, чтобы ИИ улучшил себя, он должен решать статическую задачу, а чтобы он чем-то управлял, он должен решать задачу динамическую. И единственная величина, которая мне видится общей для обеих задач - это сигнал подкрепления. То есть как сделать явную постановку цели - неочевидно.