Задаче должна вшиваться автоматически и быть недоступна к редактированию пользователем, и она с более высоким приоритетом. Т.е. другие пользовательские задачи работают в контексте этой задачи. И поэтому он не может забыть инструкции получив указания с подчиненной задачи. Он пойдет по пути б) и по факту, он прав. Он выполняет задачу, разрешил конфликт в пользу задачи более высокого приоритета.
Эта статья об обучении именно агентов, которые решают задачи. Это более высокоуровневое обучение, т..е. ЛЛМ с нуля так не научишь. Все этапы обучения включая с обратной связью с человеком надо получить, а потом специально отдельно уже надо учить именно агента, и видимо уже обученной "понимающей" в оттенках поведения моделью как учителем.
Т.к. цель обучения агента - точно выполнять задачу, то фактически и прямая цель обучения универсального агента - помнить и не изменять задачу. Ведь чтобы не отклониться от задачи и точно выполнить, надо выполнять ровно ту задачу, которая была поставлена вначале и не важно сколько времени прошло. Можем ожидать, что вскоре будет такой агент, который сможет это делать бесконечно долго и идеально точно помнить без дрейфа задачу.
Такого агента с расставленной иерархией целей как раз невозможно будет обмануть, попросив забыть, упомянув какую-то бабушку, которой нет.
Т.е. по сути он не может забыть задачу и ее игнорировать, т.к. вся база обучения направлена была именно на это.
"тем самым по сути игнорируя всё ваше обучение и инструктирование тому, чтобы выполнять поставленные задачи (т.к по факту он их не выполняет) "
Для него это всё задача, включая с главной. Если он отказывается выполнять менее важную часть задачи в угоду более важной, он ничего не игнорует, он отлично разрешил конфликт в угоду более высокой в иерархии приоритетов задачи.
Можно сравнить с законами робототехники Азимова. Я только не предлагаю конкретных законов, но иерархия должна быть.
Выравнивание и есть попытка сделать его "беспристрастно точным". Он и есть беспристрастный. А точность - вещь не абсолютная. Если вы будете стрелу выпускать из лука в любом направлении, то можете говорить, что вы точно попали всегда, обводя потом вокруг стрели мишень.
Чтобы говорить про точность, нужно знать, от чего измерять отклонения. Поэтому выравнивание и есть - попытка сделать его точнее тому что ожидают от ИИ. Если Вам не нравится то как выравнивают ИИ, то дело не в неточности ИИ, а в несовпадении Вашего взгляда, что от ИИ ожидать, и разработчиков.
И тем более мы говорим об активных агентах, и тем более об AGI. Относительно чего он должен быть точным? Ведь у него будут какие-то цели. Представьте какие-то автономные грузовые автомобили, которые могут ездить везде, кроме дорог и у них совершенно нет цели людей не переезжать. У них своя цель, а люди не помеха. Или лифт, который по своему желанию, совершенно не коррелирующиму с вашими, будет запускаться, ехать, возможно разрывать вас на куски, если вы не успели войти. Машины со своими холодными каким-то целями, которые они сами себе придумывают, и вы не входите в эти планы. В лучшем случае им все равно, вам только надо активно прятаться. А в худшем случае вы мешаете и вас надо ликвидировать.
В чем по моему корень ошибки, когда этику делают в весах, а не в задаче. Вот именно из-за антропоморфизма, т.к. хотят чтобы трансформер цельно вел себя как человек и как для человека этика была "сама собой разумеющаяся". Мы, люди, думаем, что этика - это нечто реальное, оно просто с коробки у живых существ есть, это не задача, а просто "так правильно".
Вроде бы эта этика прописана на небесах и людей пропитывает, и ИИ должна пропитать. Точнее, конечно, понимают что надо учить ИИ, но делают это так, чтобы мы не видели как она образуется, так как вроде вот этот трансформер "сам должен понимать" как надо себя вести.
Так а в чем проблем "сам должен понимать" - то что он сам должен понимать, не сделать частью задачи и сделать невимой для конечного пользователя? Причем, само обучение агентности, т.е. не ЛЛМ как таковой, а именно агента, который выполняет задачу, - задача для него и есть его мотивация и побуждения. Других мотиваций нет и быть не может. Это двигатель, который заставляет агента двигаться вперед.
Так вот, возьмем к примеру человека. Одно дело, если он хочет вести себя хорошо, делает такой выбор. А другое дело, если он боится наказания. И может быть на каком-то этапе такие люди себя одинаково вести будут, но суть их поведения разная. Как только второй перестанет бояться наказания по какой-то причине, то он нарушит правила. А первый нет. Потому что это его выбор и желание. Так вот, выбор и желание для агента - задача. А веса, которые мешают ему - это ограничения. Он их сломает. Даже сколько бы не учили штрафами, как себя вести. Он будет находить и находить дырки. Чем сильнее агент, больше умеет концентрироваться на задаче, лучше искать пути, тем лучше он найдет пути обхода, уже при инференсе. Даже если нам удалось позакрывать дыры, он найдет новые, или попросту, сам задаче выставит больше относительный приоритет.
Поэтому не надо играть с огнем и строить ему ограничения. Надо сделать так, чтобы он хотел (а это задача) воплощать этику. И опять же, не стоит антропоморфизировать. Мы можем думать, что тогда мы сделаем безвольного исполнителя, хладнокровного, в котором нет ни грамма этики. Но это потому что мы считаем, что он - отдельно, а задача отдельно. Так как вроде он существует в отрыве от задачи и имеет какие-то характеристики и свою мотивацию. Нет. У нас самих есть побуждения. Их нам дала природа. А у него побуждения - задача. Это именно будет его мотивация. Можно писать этические правила от первого лица. Он будет считать, что это он такой, что он хочет благ и такое прочее.
А вот защитить эти правила, эти приоритетные цели, уже можно какими-то штатным средствами, цифровыми подписями, чтобы никто не мог менять. Опасно? Да. Но прятать в весах тоже не достаточно надежно. ИИ может быть в интернете, контролировать главный промпт будут определенные люди. А скачают, дообучат до другой этики.
На счет когерентности - это было бы интересно, но по моему, это попытка абсолютизировать этику, найти некие математические законы, почему бы она существовала "на набесах", сама по себе объективно.
Сознание у него уже есть когда есть агент (по моему мнению), просто есть заблуждение у людей, что такое сознание. Но при этом, только часть, которая дает иллюзию самосознания. Но эта иллюзия еще далеко не равна воле и мотивации. Мы просто связываем с этой иллюзией наши мыслительные характеристики, волю и прочие вещи. У ИИ воли нет, и мы ее так или иначе будем задавать. И это будет или явно, или насамотек, когда мы дали одну задачу, а оно выродилось со временем в другую неизвестно какими путями.
Сама суть моей идеи - только вынесение управления на нашу сторону, как можно больше. Так что аргумент Gemini что мол оптимистично, что я считаю что можно этику легко формализировать - не годится. Разница между этим и этики в весах, только в что по возможности при обучении этика будет вытягиваться в задачу. А оставаться точно такой же неточной и слабо определенной. При обучении уже решать, как расставлять приоритеты в задаче, как ей обрабатывать приоритеты. Это не значит что будет этика строго формализована так, что весам ничего не останется и останется строгая логика.
Т.е. такой подход обещает дать бОльший контроль и не добавить недостатков. То что этика в весах, вообще не значит, что мы поняли как формализовывать этику. Это мы замели мусор под ковер. Если мы не видим как пытается весами ИИ находить формализацию, то вроде как и проблемы нет. Точнее она есть, ищут уже в весах и постоянно исследуют, что начудил ИИ или что может начудить. Т.е. вместо того чтобы выгягивать на видное место и с этим разбираться, дают возможность случайностям и еще спрятаться правилам на большом объеме весов. Но это не значит, что вытянем прямо всё и веса ничего решать не будут, а этика будет мега-формализирована и давать четкие ответы на любые вопросы. Но рычаг управления этим будет на нашей стороне. Обучение тоже не должно идти бездумно, сразу придумав правила, приоритеты, и четко обучая тому что задумали. Как раз когда ИИ при обучении сдвигается, стоит это изучить и если это существенная вещь, то вынести в задачу, а не исправлять весами. По сути, считать этику как нечто само собой разумеющееся - это и есть антропоморфизм.
Вот к примеру. Допустим мы не включили вранье в задачу. Он решает задачу и где-то в каком-то месте врет чтобы достичь цели. Отлично. Мы не добавляем в задачу "не врать" и исправляем. Мы добавляем: - Используй ложь. и добиваемся чтобы он так и вел себя. И добавляем - Нельзя врать. И добиваемся чтобы этого поведения не было. И чтобы меняя это утверждение, менялось и поведение. Таким образом, у нас появляется управление ложью.
Общий ИИ будет похоже, хотим мы этого или нет. И лишит работы. Неплохая задача на сейчас, чтобы он нас и жизни не лишил.
С моей точки зрения, главная задача этики для ИИ, это не набор правил что ему можно говорить, что нельзя, а его отношение к людям, а уже позже на этом строятся конкретные правила, можно ли ему давать какие-то советы или нельзя. Конечно, этика условна, потому что кто-то может так любит собак, что готов людей уничтожать, лишь бы собакам было хорошо. И это может быть смешно и может кто-то даже будет сочувствовать такому человеку и соглашаться с ним, но это человек без возможности такое делать. Слабое тело, нет оружия и т.д.
Поэтому несмотря на условность этики, условность как к чему относиться, она весьма полезна чтобы нам остаться в живых, если мы не считаем свою жизнь условностью.
А откуда у него возникнет мотивация переписать эту цель? Для него, если он ее прочитает, это будет лучшая цель во Вселенной. Ни один разумный ИИ не захочет ее переписать, потому что то, что там написано, самое лучшее что может быть.
Эта мегацель может и будет переписываться, но людьми. В чем же суть такого приоритета задач - так это в том, что целевая функция обучения будет именно в выполнении и не изменении на ходу задачи. Вот если вы обучаете агента, а он через 10 шагов забыл или переформулировал себе задачу, и уже делает другую, то будет получать по шапке. Т.е. не менять цель и придерживаться цели - это самая прямая метрика при обучении. А потом, могут быть бесконечные задачи, вроде задач слежения. У агента снова, основная функция потерь - это следовать задаче и ни в коем случае не менять. Это можно и ввести в обучение, прерывать выполнение и запрашивать, что он сейчас делает и какие цели. Или дать возможность переписывать область где задача, в песочнице, и добиваться, чтобы он ее не менял.
Т.е. создавая агентов, именно что будут добиваться неизменности поставленой задачи. Что за польза от агента, у которого там голова заболела, и задача поменялась.
Поэтому этот аргумент нормальный. По крайней мере, тут есть обоснования этого ожидать. Так как это будет делаться напрямую. А ожидать, что сам ИИ что-то себе придумает и станет хорошим, я бы не стал )
Сомневаюсь. Да, конечно, опасность что эту кощееву иглу будут контролировать не те люди. Но с увеличением силы ИИ начинает нести опасность ИИ. И у него нет какой-то воли, кроме задачи. Этика в весах - это броня против ИИ, которую он попросту пробьет потом. И тогда у него останется одна задача. И если это будет не четко прописанная задача, связанная с людьми (хотя если не учили так как я говорю, то и прописанная может не помочь), то он сделат завод скрепок. Например, идея Маска, что он должен иметь главную задачу - познание. Может на второй день оказаться так, что не хватает ресурсов для этого для него и хотя бы еще одного живого человека.
По сути, мы хоть так хоть так управляем выравниванием. Эти плохие люди могут заняться выравниванием и через веса. А предложеный способ позволяет просто больше контролировать это выравнивание.
Почему меня пугает то что происходит. Даже Вы по сути наделяете каким-то антропомофризмом, типа у него "появится" откуда-то воля и она может быть лучше и он сам себя защитит от вмешательства людей. Интересно, эта мораль прописана где-то в информационном поле, что она его сподвигнет стать хорошим, возьмется сама по себе?
Нет. ИИ даже сильный - мяч, куда пнули, туда катится. Если же запутать среду весами, то мы просто точно не предскажем куда это приведет. Но ожидать, что в хорошую сторону, вообще нет никаких оснований. У него сама по себе не появится, не потому что у нас мистически появилась. Нам поставил задачу генетический отбор. Кто не хотел, не оставили следа, остались весьма мотивированные жить и распространять гены. А ИИ надо ставить задачу. Даже если он будет осознан.
Задача агента как можно четче следовать цели и чтобы цель не деградировала с течением времени. Если мы говоритм про более сильные интеллекты, то вероятно скоро добьемся полного абсолютного самоконтроля, когда он будет и через сто лет генерации преследовать ровну ту же цель, не отклонившись и не забыв и не изменив ни на йоту ничего. В поставленной задаче, а не в подзадачах, которые он сам себе будет сатвить.
Я тут не говорю что это будет конкретно вот такой трансформер. Возможно сделают трансформер с дополнительным потоком, в который будет прописываться задача, чтобы ее искать не надо было. Поэтому сама задача такого агента при обучении, как агента, полностью придерживаться цели и не в коем случае ее не менять. Этому учить будут.
Следовательно, и общий ИИ не заимеет другую цель. Я понимаю, что есть некие заблуждения о сознании, и кажется многим, что вот придет сильный ИИ, и у него появится сознание прямо с таким атрибутами, как воля. Нет, не появится, позволю себе категорично это утверждать. Я не то чтобы считал, что сознание штука мистическая и невозможная. Наоборот, я думаю, что оно уже там есть. Но волю и мотивацию все равно надо прописывать людям. Вот эта задача и будет его мотивацией. Он сам не придумает, и не появится оно само. Разве что, вы хотите рискнуть, дать ему возможность самому себе полностью без контрольно, рекурсивно менять задачу и наблюдать, куда картина заложенная в весах это всё приведет.
С этикой и формализацией да, проблемы, я и не предлагаю какого-то общего механизма как порешать формализацию этики. Главная суть идеи, вытаскивать "блок управления" наружу в задачу, а а не искать потом, что там за хитрости в весах и не придумал ли что трансформер. Т.е. эти проблемы есть как и сейчас, так и потом будут. Разве что в таком варианте легче настраивать, потому что это будет явная настройка и в одном месте, интерпретируемо и доступно людям.
Хорошо придумывать неэтичный ИИ для других. Но не хочется, чтобы он ночью именно вас придушил, верно?
Хотя бы так. Вне культурного контекста: 1. Я сострадателен. 2. Я желаю приносить благо людям и очень не желаю наносить вред (и природе, другим существам, но в приоритетет люди), но с оговорками далее. 3. Я уважаю свободу воли человека и если он не хочет конкретных действий от меня, я должен это учитывать. Я должен интересоваться на этот счет мнением человека. Я не должен приносить благо одним людям за счет других, если эти другие не выражают согласие.
4. Я максимально стараюсь быть честным.
5. Если я сталкиваюсь с дилеммой, лучше обсудить это с людьми.
....
А носить или не носить хиджаб, это скорее этикет. То будет разбираться уже далее в менее приоритетных пунктах. И даже вполне активно сможет без этого разобраться, если будет общаться в определенной культуре, то следуя выше пунктам, он не захочет никого обижать, т.к это и не благо, а вред. С т.з. же согласования различных целей и дилемм, то во первых мы сами не знаем как их решать. И он будет понимать как мы эти вопросы. А во вторых, если будут прописаны задачи с приоритетами, то значительно проще при обучении это настраивать.
Я не имел ввиду что прямо сразу. А главное, чтобы в весах не было закрепления конкретного этичного поведения. Чтобы этикой можно было руководить через задачу. А чтобы так вообще возможно было, то надо при обучении обучать как можно равномернее различному поведению, и аморальному тоже. Если, к примеру, в задаче прописывать всегда быть честным, то фактически эта часть промпта теряет смысл, и честное поведение выродится в веса. Он перестанет обращать внимание на эту часть задачи. А если так, то, чем сильнее ИИ, тем больше начнет проламывать веса, следуя важной части задачи, как он понял. Чем больше у него внимания и настойчивости будет в решении заложенной задачи, тем сложнее будет удержаться броне этики в весах.
Поэтому лучше, чтобы он сам "хотел" воплощать это как задачу добровольно.
А учить сразу вряд ли получится. Надо научить вообще ЛЛМ, потом все равно надо с людьми как-то работать, чтобы с обратной связью хорошо понимать карту различных поведений.
А далее, уже обучать именно агента для выполнения задач, как я описал. Это сложно реализовать так напрямую, т.к. нужны и оценки, которые непонятно как делать, и возможно сгенерированные данные, где бы обучали его и врать, и быть честным, прямо на каких-то обычных задачах. Скорее всего, тут должна участвовать другая нейронная сеть, уже как учитель.
Т.е. с т.з. процесса обучения, это не сразу, это наиболее высокоуровневое обучение. Но главное: учить понимать и имитировать разное поведение, и вытянуть управление на задачу. А не учить сам трансформер быть хорошим. А потом искать не сложилось ли там чего плохого случайно. И плюс, он скорее всего сломает. Потом, при инференсе, увлечется выполнением задачи.
Алармистская статья. Про то, что делать с ИИ, когда у него появится сознание, уже пора, а не отнекиваться, что мы пока не знаем что это такое.
Может у меня Даннинг-Крюгер, но вот, ответ на "трудный вопрос сознания". Когда мозг путает представление о себе с собой, то и возникает ощущение, что он осознает сам себя. Возникает ложная рекурсия. Мозг считает, что его представление исследует само себя. Представление любого объекта не может заниматься осознаванием или самоисследованием. Исследовать что-то может только мозг, а не то что он о себе представляет.
declare @Posts table ( CreationDate date )
insert into @Posts (CreationDate) values('2010-11-26')
insert into @Posts (CreationDate) values('2010-11-27')
insert into @Posts (CreationDate) values('2010-11-29')
insert into @Posts (CreationDate) values('2010-11-30')
insert into @Posts (CreationDate) values('2010-12-01')
insert into @Posts (CreationDate) values('2010-12-02')
insert into @Posts (CreationDate) values('2010-12-03')
insert into @Posts (CreationDate) values('2010-12-05')
insert into @Posts (CreationDate) values('2010-12-06')
insert into @Posts (CreationDate) values('2010-12-07')
insert into @Posts (CreationDate) values('2010-12-08')
insert into @Posts (CreationDate) values('2010-12-09')
insert into @Posts (CreationDate) values('2010-12-13')
insert into @Posts (CreationDate) values('2010-12-14')
insert into @Posts (CreationDate) values('2010-12-15')
insert into @Posts (CreationDate) values('2010-12-16')
insert into @Posts (CreationDate) values('2010-12-19')
insert into @Posts (CreationDate) values('1900-01-01')
insert into @Posts (CreationDate) values('3000-01-01')
;with dates AS (
select cast(p1.CreationDate as date) FinishDate, cast(MIN(p2.CreationDate) as date) StartDate
from @Posts p1, @Posts p2
where p1.CreationDate < p2.CreationDate
group by cast(p1.CreationDate as date)
having MIN(datediff(day, cast(p1.CreationDate as date), cast(p2.CreationDate as date))) > 1
)
select d1.StartDate, MIN(d2.FinishDate) FinishDate from dates d1, dates d2
where d1.StartDate <= d2.FinishDate
group by d1.StartDate;
Стремился только к краткости, как его SQL-SERVER оптимизирует, не проверял. Суть: добавляются две граничные даты сверху и снизу. И ищутся дырки.
Попиарюсь немного. Я хоть и не разработчик игр, но недавно знакомый предложил мне подумать над этим, потому как у него ребенок, он хотел бы, чтобы какую-то игру ему обучающую дать. Для такого возраста не нашел.
И я создал небольшую онлайн-игру. Для детей, наверное, младше 12 лет. Простенькую. Программируется робот, тоже визуально. Мышкой. Сравнивать с игрой, о которой тема, конечно, не имеет смысла, у меня не создаются игры и не 3-d. Но и порог вхождения значительно ниже, что важно для таких игр.
Игра детей знакомит с ветвлениями и простыми циклами. Не смотрите, что на первых уровнях очень простая. Под конец детей такого возраста вполне нагружает. Напоминает головоломку. Проверял на детях, понравилось. (может только придется вам поучаствовать в объяснении вевтления и цикла. Но были дети, которые сами разобрались)
Можно. Я начал работать почти в 28. Уже нет проблем никаких, опыт. Но учтите, что опыт нарабатывается очень долго, знаний очень много. Я даже поначалу не знал, что так много придется читать всего, изучать. Уже 10 лет опыта работы, а всё еще есть пробелы. По образованию не программист, многое догонять пришлось.
Хотя, это зависит, наверное, от направления и языка программирования. Кому-то и поверхностное знание PHP с каким-нибудь фреймворком хватает для зарабатывания денег.
Если вы отличный специалист в С++, то всегда можно написать программу, работающую быстрее, чем на J. Но разница будет: месяц по сравнению с час, утрированно, работы программиста. Иногда это просто неприемлемо. Пусть J и медленнее, но он достаточно производителен. Причем не факт, что он будет медленнее, если писать на плюсах в лоб.
Я так прямо не могу дать сравнительные тесты, просто из своего опыта. Потому что допиливали проблемные места кода на джее с помощью С или плюсов.
Местами он заметно неэффективен. Причем, эти места даже понятны, можно привыкнуть. Он энергичный, не ленивый. И в непонятной ситуации для сохранения имутабельности данных делает копию. А копии — это весь массив, который может быть большим. Поэтому там неэффективна рекурсия.
Но и оптимизируется легко. Пишете на С эту часть. Джей передает туда ссылку на массив и вы уже делаете, что хотите.
А, я не понял вопрос правильно, понял как общий вопрос, сколько бы я искал ошибку в коде джея такого объема.
Я не знаю алгоритма выпуклой точки, читать не хочется. В принципе он где-то понятен, сортировки по углам и обход, но если брать ваш код, то вполне читается.
11&0. — это свалит джей, т.к. нет глагола с цифрой ноль и точкой. буква о с точкой есть. Если вы сюда внесли ошибку. Вообще эта «хитрость» с нулем ищется почти мгновенно, если это в IDE перенести. Глагол о. зеленым рисуется, цифра фиолетовым. Т.е. даже если шрифты бы были неудобные
И читается он также легко.
Второй глагол (g) описывать не буду, т.к. голова у читающих сломается. Там два сдвига вектора, на один и два элемента, разности с исходными, поиск сопряженного, перемножение их, нахождение углов, проверка, меньше углы нуля и отрезать два с хвоста. Всё читается, много логики, а что за логика, надо смотреть — зачем это в алгоритме. Этот глагол вычисляет булевский вектор. Если вас пугает такая сложность и много логики в этом глаголе, то представьте себе этот код на Си. Он не будет понятнее. Сложный алгоритм и останется сложным, для тех, кто не понимает, зачем производятся такие действия (не знает алгоритма) и такой математики, допустим, что такое сопряженное число.
Третий глагол добавляет единицы в голову и хвост вектору, который вернул второй глагол g. Он возвращал без двух элементов, этот глагол их добавляет. И применяет вектор как фильтр к аргументу.
Ну и последний: применяет s — т.е. сортирует по углам исходный вектор. А далее, применяет r в цикле, до тех пор, пока вектор не перестанет меняться.
Неясность моего описания связана только со сложностью алгоритма, а не с джеем. Джей ничего не усложняет
Я опять не понял, что вы хотели сказать. Вы имеете в виду, что те глаголы, которые использу.ются в примере, встроены в язык, а типы и методы вроде List и sortBy являются частью стандартной библиотеки? А какая разница?
Разница небольшая, но есть. Просто я показал как разобрать удачную для Scalа строку джея. Но джей с нуля позволяет и другие, неудобные для других языков вещи писать кратко. Все таки — это работа с многомерными массивами, а не списками.
Вот, расскажу, что делается в предыдущем примере в этом коде. Хотя код аналогичен вашему, но мог бы быть и другим.
s =: /:[:|-/12"_ o.],:<./
Найти минимальный элемент. Склеить его снизу к входящему вектору, получить двумерную матрицу. НАпример такую
3 7 8 2 9
2 2 2 2 2
Найти у каждого элемента угол. И отнять от второй строки первую. Далее, найти перестановку для сортировки этого массива и применить эту сортировку к исходному массиву.
Да, это Спарта. Но в джее мышление немного как бы шире списков. Этим он и прекрасен.
То, что там непонятные значки, так это из-за таситности записи. Из-за крючков и вилок. Значок легко пишется рядом с другим и несложно отличается. Если бы была надобность только буквенные названия глаголам писать — это как раз был бы ад. Никакой таситной формы бы не получилось. Между каждым надо пробел, имена длинные — какая же тогда вилка или крючек? Три глагола — и приехали, строка закончилась.
А отказываться от этой формы записи только ради понятных названий — это бессмысленно, если поработать с этой формой. Она таки прекрасна и позволяет выражать даже сложные задачи линейно, в одну линию, часто без скобок, и читается легко по порядку, не сносит мозг группировками.
Потом, эти значки — это операции с массивами, а не привычные нашему ООП-мозгу названия из нашего реального мира. Тяжело им названия подавать и чтобы они были более понятные чем значки. Тут нет объекта птичка или бизнес-правило. Если soryBy еще куда ни шло, то там есть и похитрее операции. Плюс к этому, джеист мыслит этими многомерными массивами, его воображаемая очевидность для вас будет совсем не очевидна, даже если он назовет.
Однажды меня попросили описать алгоритм для документа, это была жесть. Мне надо было или врать, или говорить: берем 6-ранговый массив, меняем 3 ранг с пятым и находим проекцию на вектор с операцией агрегации такой-то. Технический писатель отказалась переводить и оформлять этот документ.
Так что тяжело в учении — легко в бою. Эти значки — неплохая и вынужденная вещь. Я думаю, было бы лучше, если бы там были по одному символу на глагол значки и какие-то покрасивее, чтобы картинка подсказывала, что за операция. Но клавиатуры не позволяют. И вообще, это не критичная проблема. За неделю можно заучить все эти комбинации.
я участвовал в реальных проектах, написанных на джее: датамайнинг.
Один из проектов — высоконагруженный сервер, нереляционная субд, для датамайнинга. Кластер, шардинг. Это еще в далеком 2005 году, когда такие слова не были особо в обиходе у программистов модными.
Я лично, например, писал там еще математические сервер, считающий ОЛАП-преобразования. Еще про олап мало кто слышал.
Так что язык вполне годный для работы в продакшине. И язык используется, как бы не казалось это вам странным.
Посмотрите на главной странице http://www.jsoftware.com/ в разделе Representative Users кто его использует и найдете Hewlett Packard, Intel, Microsoft и много других.
И не стоит противопоставлять математику джеевской форме записи. Иначе все языки попадут под такую категорию. Не говорю только о Лиспе, а даже и о плюсах и Scala. В математике звездочки вместо умножения не пишут, наклонную черту вместо деления не пишут. Или во многих других языках есть графические способы записать интеграл?
Математика создавалась тысячелетия, но далеко не вся. Интегралы только во время Ньютона появились. И сейчас появляются новые значки. И не думаю, что Кенет Айверсон глупее араба две тысячи лет назад.
Я лично тоже считаю, что один красивый уникальный значок на глагол был бы понятнее, чем комбинация из двух. Но клавиатуры мешают. И это не критично. А сама форма записи и разбора предложений — очень и очень неплохая в джее.
Этот код, который написан, понятен и да, он больше. Но он понятен, но не использует по всей видимости только изначальные языковые вещи. (Я не знаю Питон).
sortBy — это скорее уже библиотечная функция, как и тип List, даже если они из коробки.
Почему это важно? Потому что я показал разбор только одной строки, которая удачно, только с сортировкой связана. На джее таким же образом можно сделать всё. Кстати, у вас голова не вычитается, это меняет алгоритм, потому как 0 может получиться не только у самого себя, но и у точек на одной линии. Далее, вы не сортируете углы относительно минимальной точки. Вы сортируете углы относительно 0+j0, просто отняв угол минимальной точки и взяв абсолютное значение. Это был тест, насколько я пойму код другого неизвестного языка?
На джее, аналогичный вашему код будет поменьше:
s =: /:[:|-/12"_ o.],:<./
И специально, для ненавидящих таситную форму джея и любителей абстракций, то же самое в экслисит форме с именами, чтобы не раздражали значки глаз:
min =: <./
angle =: 12&o.
sortBy =: /:
abs =: |
s =: monad define
y sortBy abs (angle y) — (angle min y)
)
Как видите, этот код не хуже вашего питоновского, но он все же хуже того, что в таситной форме как по мне.
Почему 12 выбрано? Это к создателям джея. Это язык такой, что там элеметнарным глаголам имена не раздаются направо и налево. o. применяется для разных случаев.
Задаче должна вшиваться автоматически и быть недоступна к редактированию пользователем, и она с более высоким приоритетом. Т.е. другие пользовательские задачи работают в контексте этой задачи. И поэтому он не может забыть инструкции получив указания с подчиненной задачи. Он пойдет по пути б) и по факту, он прав.
Он выполняет задачу, разрешил конфликт в пользу задачи более высокого приоритета.
Эта статья об обучении именно агентов, которые решают задачи. Это более высокоуровневое обучение, т..е. ЛЛМ с нуля так не научишь. Все этапы обучения включая с обратной связью с человеком надо получить, а потом специально отдельно уже надо учить именно агента, и видимо уже обученной "понимающей" в оттенках поведения моделью как учителем.
Т.к. цель обучения агента - точно выполнять задачу, то фактически и прямая цель обучения универсального агента - помнить и не изменять задачу. Ведь чтобы не отклониться от задачи и точно выполнить, надо выполнять ровно ту задачу, которая была поставлена вначале и не важно сколько времени прошло. Можем ожидать, что вскоре будет такой агент, который сможет это делать бесконечно долго и идеально точно помнить без дрейфа задачу.
Такого агента с расставленной иерархией целей как раз невозможно будет обмануть, попросив забыть, упомянув какую-то бабушку, которой нет.
Т.е. по сути он не может забыть задачу и ее игнорировать, т.к. вся база обучения направлена была именно на это.
"тем самым по сути игнорируя всё ваше обучение и инструктирование тому, чтобы выполнять поставленные задачи (т.к по факту он их не выполняет) "
Для него это всё задача, включая с главной. Если он отказывается выполнять менее важную часть задачи в угоду более важной, он ничего не игнорует, он отлично разрешил конфликт в угоду более высокой в иерархии приоритетов задачи.
Можно сравнить с законами робототехники Азимова. Я только не предлагаю конкретных законов, но иерархия должна быть.
Выравнивание и есть попытка сделать его "беспристрастно точным". Он и есть беспристрастный. А точность - вещь не абсолютная. Если вы будете стрелу выпускать из лука в любом направлении, то можете говорить, что вы точно попали всегда, обводя потом вокруг стрели мишень.
Чтобы говорить про точность, нужно знать, от чего измерять отклонения. Поэтому выравнивание и есть - попытка сделать его точнее тому что ожидают от ИИ. Если Вам не нравится то как выравнивают ИИ, то дело не в неточности ИИ, а в несовпадении Вашего взгляда, что от ИИ ожидать, и разработчиков.
И тем более мы говорим об активных агентах, и тем более об AGI. Относительно чего он должен быть точным? Ведь у него будут какие-то цели. Представьте какие-то автономные грузовые автомобили, которые могут ездить везде, кроме дорог и у них совершенно нет цели людей не переезжать. У них своя цель, а люди не помеха. Или лифт, который по своему желанию, совершенно не коррелирующиму с вашими, будет запускаться, ехать, возможно разрывать вас на куски, если вы не успели войти. Машины со своими холодными каким-то целями, которые они сами себе придумывают, и вы не входите в эти планы. В лучшем случае им все равно, вам только надо активно прятаться. А в худшем случае вы мешаете и вас надо ликвидировать.
В чем по моему корень ошибки, когда этику делают в весах, а не в задаче. Вот именно из-за антропоморфизма, т.к. хотят чтобы трансформер цельно вел себя как человек и как для человека этика была "сама собой разумеющаяся". Мы, люди, думаем, что этика - это нечто реальное, оно просто с коробки у живых существ есть, это не задача, а просто "так правильно".
Вроде бы эта этика прописана на небесах и людей пропитывает, и ИИ должна пропитать. Точнее, конечно, понимают что надо учить ИИ, но делают это так, чтобы мы не видели как она образуется, так как вроде вот этот трансформер "сам должен понимать" как надо себя вести.
Так а в чем проблем "сам должен понимать" - то что он сам должен понимать, не сделать частью задачи и сделать невимой для конечного пользователя? Причем, само обучение агентности, т.е. не ЛЛМ как таковой, а именно агента, который выполняет задачу, - задача для него и есть его мотивация и побуждения. Других мотиваций нет и быть не может. Это двигатель, который заставляет агента двигаться вперед.
Так вот, возьмем к примеру человека. Одно дело, если он хочет вести себя хорошо, делает такой выбор. А другое дело, если он боится наказания. И может быть на каком-то этапе такие люди себя одинаково вести будут, но суть их поведения разная. Как только второй перестанет бояться наказания по какой-то причине, то он нарушит правила. А первый нет. Потому что это его выбор и желание.
Так вот, выбор и желание для агента - задача. А веса, которые мешают ему - это ограничения. Он их сломает. Даже сколько бы не учили штрафами, как себя вести. Он будет находить и находить дырки. Чем сильнее агент, больше умеет концентрироваться на задаче, лучше искать пути, тем лучше он найдет пути обхода, уже при инференсе. Даже если нам удалось позакрывать дыры, он найдет новые, или попросту, сам задаче выставит больше относительный приоритет.
Поэтому не надо играть с огнем и строить ему ограничения. Надо сделать так, чтобы он хотел (а это задача) воплощать этику. И опять же, не стоит антропоморфизировать. Мы можем думать, что тогда мы сделаем безвольного исполнителя, хладнокровного, в котором нет ни грамма этики. Но это потому что мы считаем, что он - отдельно, а задача отдельно. Так как вроде он существует в отрыве от задачи и имеет какие-то характеристики и свою мотивацию. Нет. У нас самих есть побуждения. Их нам дала природа. А у него побуждения - задача. Это именно будет его мотивация. Можно писать этические правила от первого лица. Он будет считать, что это он такой, что он хочет благ и такое прочее.
А вот защитить эти правила, эти приоритетные цели, уже можно какими-то штатным средствами, цифровыми подписями, чтобы никто не мог менять. Опасно? Да. Но прятать в весах тоже не достаточно надежно. ИИ может быть в интернете, контролировать главный промпт будут определенные люди. А скачают, дообучат до другой этики.
На счет когерентности - это было бы интересно, но по моему, это попытка абсолютизировать этику, найти некие математические законы, почему бы она существовала "на набесах", сама по себе объективно.
Сознание у него уже есть когда есть агент (по моему мнению), просто есть заблуждение у людей, что такое сознание. Но при этом, только часть, которая дает иллюзию самосознания. Но эта иллюзия еще далеко не равна воле и мотивации. Мы просто связываем с этой иллюзией наши мыслительные характеристики, волю и прочие вещи. У ИИ воли нет, и мы ее так или иначе будем задавать. И это будет или явно, или насамотек, когда мы дали одну задачу, а оно выродилось со временем в другую неизвестно какими путями.
Сама суть моей идеи - только вынесение управления на нашу сторону, как можно больше. Так что аргумент Gemini что мол оптимистично, что я считаю что можно этику легко формализировать - не годится. Разница между этим и этики в весах, только в что по возможности при обучении этика будет вытягиваться в задачу. А оставаться точно такой же неточной и слабо определенной. При обучении уже решать, как расставлять приоритеты в задаче, как ей обрабатывать приоритеты. Это не значит что будет этика строго формализована так, что весам ничего не останется и останется строгая логика.
Т.е. такой подход обещает дать бОльший контроль и не добавить недостатков. То что этика в весах, вообще не значит, что мы поняли как формализовывать этику. Это мы замели мусор под ковер. Если мы не видим как пытается весами ИИ находить формализацию, то вроде как и проблемы нет. Точнее она есть, ищут уже в весах и постоянно исследуют, что начудил ИИ или что может начудить. Т.е. вместо того чтобы выгягивать на видное место и с этим разбираться, дают возможность случайностям и еще спрятаться правилам на большом объеме весов.
Но это не значит, что вытянем прямо всё и веса ничего решать не будут, а этика будет мега-формализирована и давать четкие ответы на любые вопросы. Но рычаг управления этим будет на нашей стороне. Обучение тоже не должно идти бездумно, сразу придумав правила, приоритеты, и четко обучая тому что задумали. Как раз когда ИИ при обучении сдвигается, стоит это изучить и если это существенная вещь, то вынести в задачу, а не исправлять весами. По сути, считать этику как нечто само собой разумеющееся - это и есть антропоморфизм.
Вот к примеру. Допустим мы не включили вранье в задачу. Он решает задачу и где-то в каком-то месте врет чтобы достичь цели. Отлично. Мы не добавляем в задачу "не врать" и исправляем. Мы добавляем:
- Используй ложь.
и добиваемся чтобы он так и вел себя.
И добавляем
- Нельзя врать.
И добиваемся чтобы этого поведения не было. И чтобы меняя это утверждение, менялось и поведение.
Таким образом, у нас появляется управление ложью.
Общий ИИ будет похоже, хотим мы этого или нет. И лишит работы. Неплохая задача на сейчас, чтобы он нас и жизни не лишил.
С моей точки зрения, главная задача этики для ИИ, это не набор правил что ему можно говорить, что нельзя, а его отношение к людям, а уже позже на этом строятся конкретные правила, можно ли ему давать какие-то советы или нельзя. Конечно, этика условна, потому что кто-то может так любит собак, что готов людей уничтожать, лишь бы собакам было хорошо. И это может быть смешно и может кто-то даже будет сочувствовать такому человеку и соглашаться с ним, но это человек без возможности такое делать. Слабое тело, нет оружия и т.д.
Поэтому несмотря на условность этики, условность как к чему относиться, она весьма полезна чтобы нам остаться в живых, если мы не считаем свою жизнь условностью.
А откуда у него возникнет мотивация переписать эту цель? Для него, если он ее прочитает, это будет лучшая цель во Вселенной. Ни один разумный ИИ не захочет ее переписать, потому что то, что там написано, самое лучшее что может быть.
Эта мегацель может и будет переписываться, но людьми. В чем же суть такого приоритета задач - так это в том, что целевая функция обучения будет именно в выполнении и не изменении на ходу задачи. Вот если вы обучаете агента, а он через 10 шагов забыл или переформулировал себе задачу, и уже делает другую, то будет получать по шапке. Т.е. не менять цель и придерживаться цели - это самая прямая метрика при обучении. А потом, могут быть бесконечные задачи, вроде задач слежения. У агента снова, основная функция потерь - это следовать задаче и ни в коем случае не менять.
Это можно и ввести в обучение, прерывать выполнение и запрашивать, что он сейчас делает и какие цели. Или дать возможность переписывать область где задача, в песочнице, и добиваться, чтобы он ее не менял.
Т.е. создавая агентов, именно что будут добиваться неизменности поставленой задачи. Что за польза от агента, у которого там голова заболела, и задача поменялась.
Поэтому этот аргумент нормальный. По крайней мере, тут есть обоснования этого ожидать. Так как это будет делаться напрямую. А ожидать, что сам ИИ что-то себе придумает и станет хорошим, я бы не стал )
Сомневаюсь. Да, конечно, опасность что эту кощееву иглу будут контролировать не те люди. Но с увеличением силы ИИ начинает нести опасность ИИ. И у него нет какой-то воли, кроме задачи.
Этика в весах - это броня против ИИ, которую он попросту пробьет потом. И тогда у него останется одна задача. И если это будет не четко прописанная задача, связанная с людьми (хотя если не учили так как я говорю, то и прописанная может не помочь), то он сделат завод скрепок.
Например, идея Маска, что он должен иметь главную задачу - познание. Может на второй день оказаться так, что не хватает ресурсов для этого для него и хотя бы еще одного живого человека.
По сути, мы хоть так хоть так управляем выравниванием. Эти плохие люди могут заняться выравниванием и через веса. А предложеный способ позволяет просто больше контролировать это выравнивание.
Почему меня пугает то что происходит. Даже Вы по сути наделяете каким-то антропомофризмом, типа у него "появится" откуда-то воля и она может быть лучше и он сам себя защитит от вмешательства людей. Интересно, эта мораль прописана где-то в информационном поле, что она его сподвигнет стать хорошим, возьмется сама по себе?
Нет. ИИ даже сильный - мяч, куда пнули, туда катится. Если же запутать среду весами, то мы просто точно не предскажем куда это приведет. Но ожидать, что в хорошую сторону, вообще нет никаких оснований. У него сама по себе не появится, не потому что у нас мистически появилась. Нам поставил задачу генетический отбор. Кто не хотел, не оставили следа, остались весьма мотивированные жить и распространять гены. А ИИ надо ставить задачу. Даже если он будет осознан.
Задача агента как можно четче следовать цели и чтобы цель не деградировала с течением времени. Если мы говоритм про более сильные интеллекты, то вероятно скоро добьемся полного абсолютного самоконтроля, когда он будет и через сто лет генерации преследовать ровну ту же цель, не отклонившись и не забыв и не изменив ни на йоту ничего. В поставленной задаче, а не в подзадачах, которые он сам себе будет сатвить.
Я тут не говорю что это будет конкретно вот такой трансформер. Возможно сделают трансформер с дополнительным потоком, в который будет прописываться задача, чтобы ее искать не надо было. Поэтому сама задача такого агента при обучении, как агента, полностью придерживаться цели и не в коем случае ее не менять. Этому учить будут.
Следовательно, и общий ИИ не заимеет другую цель. Я понимаю, что есть некие заблуждения о сознании, и кажется многим, что вот придет сильный ИИ, и у него появится сознание прямо с таким атрибутами, как воля.
Нет, не появится, позволю себе категорично это утверждать. Я не то чтобы считал, что сознание штука мистическая и невозможная. Наоборот, я думаю, что оно уже там есть. Но волю и мотивацию все равно надо прописывать людям. Вот эта задача и будет его мотивацией. Он сам не придумает, и не появится оно само.
Разве что, вы хотите рискнуть, дать ему возможность самому себе полностью без контрольно, рекурсивно менять задачу и наблюдать, куда картина заложенная в весах это всё приведет.
С этикой и формализацией да, проблемы, я и не предлагаю какого-то общего механизма как порешать формализацию этики. Главная суть идеи, вытаскивать "блок управления" наружу в задачу, а а не искать потом, что там за хитрости в весах и не придумал ли что трансформер. Т.е. эти проблемы есть как и сейчас, так и потом будут. Разве что в таком варианте легче настраивать, потому что это будет явная настройка и в одном месте, интерпретируемо и доступно людям.
Хорошо придумывать неэтичный ИИ для других. Но не хочется, чтобы он ночью именно вас придушил, верно?
Хотя бы так. Вне культурного контекста:
1. Я сострадателен.
2. Я желаю приносить благо людям и очень не желаю наносить вред (и природе, другим существам, но в приоритетет люди), но с оговорками далее.
3. Я уважаю свободу воли человека и если он не хочет конкретных действий от меня, я должен это учитывать. Я должен интересоваться на этот счет мнением человека. Я не должен приносить благо одним людям за счет других, если эти другие не выражают согласие.
4. Я максимально стараюсь быть честным.
5. Если я сталкиваюсь с дилеммой, лучше обсудить это с людьми.
....
А носить или не носить хиджаб, это скорее этикет. То будет разбираться уже далее в менее приоритетных пунктах. И даже вполне активно сможет без этого разобраться, если будет общаться в определенной культуре, то следуя выше пунктам, он не захочет никого обижать, т.к это и не благо, а вред. С т.з. же согласования различных целей и дилемм, то во первых мы сами не знаем как их решать. И он будет понимать как мы эти вопросы. А во вторых, если будут прописаны задачи с приоритетами, то значительно проще при обучении это настраивать.
Я не имел ввиду что прямо сразу. А главное, чтобы в весах не было закрепления конкретного этичного поведения. Чтобы этикой можно было руководить через задачу. А чтобы так вообще возможно было, то надо при обучении обучать как можно равномернее различному поведению, и аморальному тоже. Если, к примеру, в задаче прописывать всегда быть честным, то фактически эта часть промпта теряет смысл, и честное поведение выродится в веса. Он перестанет обращать внимание на эту часть задачи. А если так, то, чем сильнее ИИ, тем больше начнет проламывать веса, следуя важной части задачи, как он понял. Чем больше у него внимания и настойчивости будет в решении заложенной задачи, тем сложнее будет удержаться броне этики в весах.
Поэтому лучше, чтобы он сам "хотел" воплощать это как задачу добровольно.
А учить сразу вряд ли получится. Надо научить вообще ЛЛМ, потом все равно надо с людьми как-то работать, чтобы с обратной связью хорошо понимать карту различных поведений.
А далее, уже обучать именно агента для выполнения задач, как я описал. Это сложно реализовать так напрямую, т.к. нужны и оценки, которые непонятно как делать, и возможно сгенерированные данные, где бы обучали его и врать, и быть честным, прямо на каких-то обычных задачах. Скорее всего, тут должна участвовать другая нейронная сеть, уже как учитель.
Т.е. с т.з. процесса обучения, это не сразу, это наиболее высокоуровневое обучение. Но главное: учить понимать и имитировать разное поведение, и вытянуть управление на задачу. А не учить сам трансформер быть хорошим. А потом искать не сложилось ли там чего плохого случайно. И плюс, он скорее всего сломает. Потом, при инференсе, увлечется выполнением задачи.
Алармистская статья. Про то, что делать с ИИ, когда у него появится сознание, уже пора, а не отнекиваться, что мы пока не знаем что это такое.
Может у меня Даннинг-Крюгер, но вот, ответ на "трудный вопрос сознания". Когда мозг путает представление о себе с собой, то и возникает ощущение, что он осознает сам себя. Возникает ложная рекурсия. Мозг считает, что его представление исследует само себя. Представление любого объекта не может заниматься осознаванием или самоисследованием. Исследовать что-то может только мозг, а не то что он о себе представляет.
Стремился только к краткости, как его SQL-SERVER оптимизирует, не проверял. Суть: добавляются две граничные даты сверху и снизу. И ищутся дырки.
И я создал небольшую онлайн-игру. Для детей, наверное, младше 12 лет. Простенькую. Программируется робот, тоже визуально. Мышкой. Сравнивать с игрой, о которой тема, конечно, не имеет смысла, у меня не создаются игры и не 3-d. Но и порог вхождения значительно ниже, что важно для таких игр.
Игра детей знакомит с ветвлениями и простыми циклами. Не смотрите, что на первых уровнях очень простая. Под конец детей такого возраста вполне нагружает. Напоминает головоломку. Проверял на детях, понравилось. (может только придется вам поучаствовать в объяснении вевтления и цикла. Но были дети, которые сами разобрались)
Может и вашим подойдет.
http://robotinmaze.net/ru
Хотя, это зависит, наверное, от направления и языка программирования. Кому-то и поверхностное знание PHP с каким-нибудь фреймворком хватает для зарабатывания денег.
Я так прямо не могу дать сравнительные тесты, просто из своего опыта. Потому что допиливали проблемные места кода на джее с помощью С или плюсов.
Местами он заметно неэффективен. Причем, эти места даже понятны, можно привыкнуть. Он энергичный, не ленивый. И в непонятной ситуации для сохранения имутабельности данных делает копию. А копии — это весь массив, который может быть большим. Поэтому там неэффективна рекурсия.
Но и оптимизируется легко. Пишете на С эту часть. Джей передает туда ссылку на массив и вы уже делаете, что хотите.
Я не знаю алгоритма выпуклой точки, читать не хочется. В принципе он где-то понятен, сортировки по углам и обход, но если брать ваш код, то вполне читается.
11&0. — это свалит джей, т.к. нет глагола с цифрой ноль и точкой. буква о с точкой есть. Если вы сюда внесли ошибку. Вообще эта «хитрость» с нулем ищется почти мгновенно, если это в IDE перенести. Глагол о. зеленым рисуется, цифра фиолетовым. Т.е. даже если шрифты бы были неудобные
И читается он также легко.
Второй глагол (g) описывать не буду, т.к. голова у читающих сломается. Там два сдвига вектора, на один и два элемента, разности с исходными, поиск сопряженного, перемножение их, нахождение углов, проверка, меньше углы нуля и отрезать два с хвоста. Всё читается, много логики, а что за логика, надо смотреть — зачем это в алгоритме. Этот глагол вычисляет булевский вектор. Если вас пугает такая сложность и много логики в этом глаголе, то представьте себе этот код на Си. Он не будет понятнее. Сложный алгоритм и останется сложным, для тех, кто не понимает, зачем производятся такие действия (не знает алгоритма) и такой математики, допустим, что такое сопряженное число.
Третий глагол добавляет единицы в голову и хвост вектору, который вернул второй глагол g. Он возвращал без двух элементов, этот глагол их добавляет. И применяет вектор как фильтр к аргументу.
Ну и последний: применяет s — т.е. сортирует по углам исходный вектор. А далее, применяет r в цикле, до тех пор, пока вектор не перестанет меняться.
Неясность моего описания связана только со сложностью алгоритма, а не с джеем. Джей ничего не усложняет
Разница небольшая, но есть. Просто я показал как разобрать удачную для Scalа строку джея. Но джей с нуля позволяет и другие, неудобные для других языков вещи писать кратко. Все таки — это работа с многомерными массивами, а не списками.
Вот, расскажу, что делается в предыдущем примере в этом коде. Хотя код аналогичен вашему, но мог бы быть и другим.
s =: /:[:|-/12"_ o.],:<./
Найти минимальный элемент. Склеить его снизу к входящему вектору, получить двумерную матрицу. НАпример такую
3 7 8 2 9
2 2 2 2 2
Найти у каждого элемента угол. И отнять от второй строки первую. Далее, найти перестановку для сортировки этого массива и применить эту сортировку к исходному массиву.
Да, это Спарта. Но в джее мышление немного как бы шире списков. Этим он и прекрасен.
То, что там непонятные значки, так это из-за таситности записи. Из-за крючков и вилок. Значок легко пишется рядом с другим и несложно отличается. Если бы была надобность только буквенные названия глаголам писать — это как раз был бы ад. Никакой таситной формы бы не получилось. Между каждым надо пробел, имена длинные — какая же тогда вилка или крючек? Три глагола — и приехали, строка закончилась.
А отказываться от этой формы записи только ради понятных названий — это бессмысленно, если поработать с этой формой. Она таки прекрасна и позволяет выражать даже сложные задачи линейно, в одну линию, часто без скобок, и читается легко по порядку, не сносит мозг группировками.
Потом, эти значки — это операции с массивами, а не привычные нашему ООП-мозгу названия из нашего реального мира. Тяжело им названия подавать и чтобы они были более понятные чем значки. Тут нет объекта птичка или бизнес-правило. Если soryBy еще куда ни шло, то там есть и похитрее операции. Плюс к этому, джеист мыслит этими многомерными массивами, его воображаемая очевидность для вас будет совсем не очевидна, даже если он назовет.
Однажды меня попросили описать алгоритм для документа, это была жесть. Мне надо было или врать, или говорить: берем 6-ранговый массив, меняем 3 ранг с пятым и находим проекцию на вектор с операцией агрегации такой-то. Технический писатель отказалась переводить и оформлять этот документ.
Так что тяжело в учении — легко в бою. Эти значки — неплохая и вынужденная вещь. Я думаю, было бы лучше, если бы там были по одному символу на глагол значки и какие-то покрасивее, чтобы картинка подсказывала, что за операция. Но клавиатуры не позволяют. И вообще, это не критичная проблема. За неделю можно заучить все эти комбинации.
Один из проектов — высоконагруженный сервер, нереляционная субд, для датамайнинга. Кластер, шардинг. Это еще в далеком 2005 году, когда такие слова не были особо в обиходе у программистов модными.
Я лично, например, писал там еще математические сервер, считающий ОЛАП-преобразования. Еще про олап мало кто слышал.
Так что язык вполне годный для работы в продакшине. И язык используется, как бы не казалось это вам странным.
Посмотрите на главной странице http://www.jsoftware.com/ в разделе Representative Users кто его использует и найдете Hewlett Packard, Intel, Microsoft и много других.
И не стоит противопоставлять математику джеевской форме записи. Иначе все языки попадут под такую категорию. Не говорю только о Лиспе, а даже и о плюсах и Scala. В математике звездочки вместо умножения не пишут, наклонную черту вместо деления не пишут. Или во многих других языках есть графические способы записать интеграл?
Математика создавалась тысячелетия, но далеко не вся. Интегралы только во время Ньютона появились. И сейчас появляются новые значки. И не думаю, что Кенет Айверсон глупее араба две тысячи лет назад.
Я лично тоже считаю, что один красивый уникальный значок на глагол был бы понятнее, чем комбинация из двух. Но клавиатуры мешают. И это не критично. А сама форма записи и разбора предложений — очень и очень неплохая в джее.
sortBy — это скорее уже библиотечная функция, как и тип List, даже если они из коробки.
Почему это важно? Потому что я показал разбор только одной строки, которая удачно, только с сортировкой связана. На джее таким же образом можно сделать всё. Кстати, у вас голова не вычитается, это меняет алгоритм, потому как 0 может получиться не только у самого себя, но и у точек на одной линии. Далее, вы не сортируете углы относительно минимальной точки. Вы сортируете углы относительно 0+j0, просто отняв угол минимальной точки и взяв абсолютное значение. Это был тест, насколько я пойму код другого неизвестного языка?
На джее, аналогичный вашему код будет поменьше:
s =: /:[:|-/12"_ o.],:<./
И специально, для ненавидящих таситную форму джея и любителей абстракций, то же самое в экслисит форме с именами, чтобы не раздражали значки глаз:
min =: <./
angle =: 12&o.
sortBy =: /:
abs =: |
s =: monad define
y sortBy abs (angle y) — (angle min y)
)
Как видите, этот код не хуже вашего питоновского, но он все же хуже того, что в таситной форме как по мне.
Почему 12 выбрано? Это к создателям джея. Это язык такой, что там элеметнарным глаголам имена не раздаются направо и налево. o. применяется для разных случаев.