ИИ-погромизм

Зани­мал­ся вче­ра созда­ни­ем ней­ро­се­тей под руко­вод­ством ChatGPT. По ито­гам я имею ска­зать вот что.

В целом — впе­чат­ля­ет. Даёт не самый пло­хой код на Питоне для созда­ния ней­ро­се­ти на TensorFlow, что харак­тер­но — исполь­зуя keras. Прак­ти­че­ски то же самое, что я сам рисо­вал четы­ре года назад.

Толь­ко в этот раз я замах­нул­ся пошЫр­ше и решил ней­ро­се­ти скор­мить csv с «финан­со­вы­ми тран­зак­ци­я­ми». Внут­ри csv было один­на­дцать коло­нок, десять про­сто с чис­ла­ми, а один­на­дца­тая — с доволь­но слож­ным вычис­ле­ни­ем из дан­ных, нахо­дя­щих­ся в шести колон­ках (сло­же­ние двух дро­бей, вычис­ле­ние 10% от полу­чен­но­го, и скла­ды­ва­ние с ещё дву­мя колон­ка­ми). Четы­ре остав­ши­е­ся колон­ки не дела­ли ниче­го.

Модель делал пяти­слой­ную, сто ней­ро­нов в четы­рёх сло­ях, один ней­рон в выход­ном слое (это уже не ЧатЖПТ пред­ла­гал, это уже я сам). Навер­ное, это даже избы­точ­но слож­ная модель.

Сде­лал два csv фай­ла, один с 200 стро­ка­ми — это был тре­ни­ро­воч­ное мно­же­ство, и вто­рой — все­го с деся­тью. Я хотел посмот­реть, смо­жет ли ней­ро­сеть рас­по­знать, какая имен­но зави­си­мость суще­ству­ет в один­на­дца­той колон­ке, и смо­жет ли она пред­ска­зать дан­ные, полу­чен­ные таким обра­зом.

Ска­жу сра­зу, всё полу­чи­лось. Конеч­но, мате­ма­ти­ка на ней­ро­се­тях доволь­но неак­ку­рат­на, но после 5000 эпох тре­ни­ров­ки она смог­ла преду­га­ды­вать зна­че­ния с точ­но­стью, не выхо­дя­щей за рам­ки 5%. Пла­ни­рую пока­зать резуль­тат началь­ни­ку, кон­то­ра силь­но оза­бо­ти­лась встра­и­ва­ни­ем ИИ в про­дук­цию.

Но поми­мо это­го, у меня воз­ник­ли неболь­шые слож­но­сти, и воз­ник­ли они имен­но от при­ме­не­ния ИИ.

Во-пер­вых, ЧатЖПТ неред­ко даёт код для Пито­нов­ских биб­лио­тек, кото­рый уже явля­ет­ся уста­рев­шим (deprecated). Напри­мер, свой­ство pandas.DataFrame.iloc — вытас­ки­ва­ние инди­ви­ду­аль­ных коло­нок из pandas.DataFrame.

Во-вто­рых, ЧатЖПТ созда­ёт в коде баги. Напри­мер, вме­сто деся­ти строк в тесто­вом набо­ре дан­ных у меня поче­му-то счи­ты­ва­лись толь­ко девять. Раз­го­вор шёл при­мер­но вот так:

–А у меня вме­сто деся­ти ожи­да­е­мых строк толь­ко девять.
–Может, дан­ные кри­вые? Вот как их надо нор­ма­ли­зи­ро­вать.
–Дан­ные нор­маль­ные, но счи­ты­ва­ет­ся толь­ко девять строк вме­сто деся­ти. Пер­вая стро­ка про­гла­ты­ва­ет­ся.
–Не долж­на. Вот код, как пра­виль­но счи­ты­вать csv через pandas.read_csv
–Я этот код и исполь­зую, но пер­вой стро­ки нет.
–Ну, пра­виль­но, пото­му что по умол­ча­нию пер­вая стро­ка счи­ты­ва­ет­ся в име­на коло­нок. В pandas.read_csv надо ста­вить пара­метр header=None, что­бы так не про­ис­хо­ди­ло.
–А чо сра­зу-то не ска­зал?
–Изви­ня­юсь.

Но в целом (в целом) — впе­чат­ля­ет, да. Дале­ко не с каж­дым чело­ве­ком я на эту тему могу пого­во­рить, более того, не каж­дый сра­зу «на гора» выдаст рабо­та­ю­щий (более-менее) код. Оши­ба­ет­ся ино­гда? Ну да, оши­ба­ет­ся. Пока­жи­те мне чело­ве­ка, кото­рый не оши­ба­ет­ся, и я пока­жу вам лен­тяя, кото­рый нико­гда ниче­го не дела­ет. Тем не менее, лен­тяю в спо­соб­но­сти рас­суж­дать поче­му-то не отка­зы­ва­ют, а иску­ствен­но­му интел­лек­ту — таки да. Непра­виль­но это, ИМХО. ИИ вполне спо­со­бен на рас­суж­де­ния.