LINUX.ORG.RU
ФорумTalks

Даже у ИИ с этим сложности

 


0

2

Помнится в моем 2007 я пилил большой проект, частью этого проекта была проверка пересечения многоугольников выраженных через географические координаты, естественно многоугольники лежали не на плоскости, а на сфере.

Получив доступ к бесплатной версии ChatGPT я долго задавал глупые вопросы, всё больше не по программированию, но дошло дело и до него.

Вот тогда я зашел с козырей.

В 2007 я не смог найти в сети формулы которые бы решали мою проблему, к счаастью был добрый человек который подсказал взять библиотеку от сиквела, которая всё что мне надо было делать умела.

Ну так вот, ИИ не знает как это делать, или не хочет светить бесплатно какую-то вселенскую тайну:

Промт:

напиши программу на c# которая получает в аргументах массивы географических координат в виде чисел с плавающей запятой, и позволяющая определить пересечение многоуглльников

Ответ:

using System;

class Program
{
    static void Main(string[] args)
    {
        // Проверка, что в аргументах переданы два массива координат
        if (args.Length != 2)
        {
            Console.WriteLine("Используйте программу с двумя аргументами, представляющими координаты многоугольников.");
            return;
        }

        // Парсим координаты первого и второго многоугольников
        double[] polygon1 = ParseCoordinates(args[0]);
        double[] polygon2 = ParseCoordinates(args[1]);

        // Определяем, пересекаются ли многоугольники
        bool intersection = PolygonIntersect(polygon1, polygon2);

        if (intersection)
        {
            Console.WriteLine("Многоугольники пересекаются.");
        }
        else
        {
            Console.WriteLine("Многоугольники не пересекаются.");
        }
    }

    // Метод для парсинга координат из строки
    static double[] ParseCoordinates(string input)
    {
        string[] coordinates = input.Split(',');
        double[] result = new double[coordinates.Length];

        for (int i = 0; i < coordinates.Length; i++)
        {
            result[i] = double.Parse(coordinates[i]);
        }

        return result;
    }

    // Метод для определения пересечения многоугольников
    static bool PolygonIntersect(double[] polygon1, double[] polygon2)
    {
        // Ваш код для определения пересечения многоугольников

        // Здесь должен быть ваш алгоритм для определения пересечения многоугольников.

        // Верните true, если многоугольники пересекаются, и false в противном случае.

        return false;
    }
}

То есть эта штука попросту отказалась работать, скажите а подписочная версия готова решить эту задачу?


Возникает только один вопрос: А почему «Даже»?))
С какого бодуна «ИИ» (где нормально можно относится только к первому «И») должен проявлять такие способности?

vinvlad ★★
()
Ответ на: комментарий от vinvlad

ну кроме вот этого скепсиса, нужны факты, я убедился что он ИИ с большой натяжкой на втором вопросе по программированию

user13
() автор топика
Ответ на: комментарий от user13

ну кроме вот этого скепсиса, нужны факты …

Какие факты?) Вы вообще о чем…?)) Текущий «ИИ» не способен и не будет способен решать задачи подобной сложности! Всё, на что он способен - это стырить чужой код (без всяких гарантий его корректности) и выдать его вам без ссылок на оригинальный источник))

vinvlad ★★
()

Ну он тебе какое-то говно из интернета выдал без понимания что оно делает и зачем нужно. Что ты он него хотел? Глубокого понимания какого-то?
Разбей свой многоугольник на треугольники с ними задача решается тривиально. Как разбить полигон на треугольники - уже отдельный вопрос, конечно)

crutch_master ★★★★★
()

эта штука попросту отказалась работать

Дай ему наводку на пару начальных книжек по вычислительной геометрии 1, 2 и оно сразу «поумнеет» :)

quickquest ★★★★★
()
Ответ на: комментарий от crutch_master

Для своего спокойствия, хучу убедиться что нет

user13
() автор топика
Ответ на: комментарий от ox55ff

Определение пересечения многоугольников - это сложная задача, и ее реализация может занять много времени и усилий. Ниже приведена базовая структура метода PolygonIntersect, но для реальной реализации потребуется использование более сложных алгоритмов, таких как алгоритм Монтона.

static bool PolygonIntersect(double[] polygon1, double[] polygon2)
{
    // Проверьте, есть ли хотя бы одна из вершин первого многоугольника внутри второго,
    // и наоборот, а также проверьте пересекаются ли отрезки двух многоугольников.
    if (PointInPolygon(polygon1, polygon2) || PointInPolygon(polygon2, polygon1) || SegmentsIntersect(polygon1, polygon2))
    {
        return true;
    }
    
    return false;
}

// Метод для проверки, находится ли хотя бы одна вершина внутри многоугольника.
static bool PointInPolygon(double[] polygon, double[] point)
{
    // Реализация этого метода зависит от выбранного алгоритма проверки точки внутри многоугольника.
    // Вам потребуется использовать геометрические вычисления для этой цели.
    // Это может потребовать использования алгоритма "Точка в многоугольнике".
    // Верните true, если хотя бы одна вершина внутри многоугольника, иначе false.
    // ...
    return false;
}

// Метод для проверки пересечения отрезков между многоугольниками.
static bool SegmentsIntersect(double[] polygon1, double[] polygon2)
{
    // Реализация этого метода также требует сложных геометрических вычислений.
    // Вы должны проверить каждую пару отрезков между вершинами двух многоугольников на пересечение.
    // Если найдено хотя бы одно пересечение, верните true, иначе false.
    // ...
    return false;
}

Заметьте, что реализация метода PolygonIntersect здесь представлена в упрощенной форме и не содержит конкретных вычислений. Для более точной реализации вам потребуется использовать геометрические алгоритмы для определения пересечения многоугольников.

user13
() автор топика
Ответ на: комментарий от user13

Определение пересечения многоугольников - это сложная задача, и ее реализация может занять много времени и усилий

Нагнетает ещё, морда искусственная.

Nervous ★★★★★
()
Ответ на: комментарий от cocucka_B_TECTE

Люди делятся на две большие группы: на тех у кого заряжено ружье, и тех кто копает :)))

шутка, а вообще не флудите пожалуйста

user13
() автор топика
Ответ на: комментарий от user13

давай свой промт

Короче начинается эпоха ИИ, теперь на лоре будут просить не решить лабу, а составить промт, чтобы ее решить)

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)

Это языковая модель, она ничего не знает и не умеет. Можно было с этого начинать и этим закончить.

Gary ★★★★★
()
Ответ на: комментарий от goingUp

Да, и вопрос про бан в гугле станет винтажным, в итоге будут спрашивать про бан в <GPT_name>

user13
() автор топика
Ответ на: комментарий от Gary

она ничего не знает и не умеет.

Она умеет генерировать (G в названии). Особенно хорошо генерирует, когда в вопросе содержится более половины ответа. А как известно, хороший вопрос...

Совет топикстартеру - учиться задавать вопросы.

Suigintou ★★★★★
()
Ответ на: комментарий от Suigintou

Она умеет генерировать (G в названии)…когда в вопросе содержится более половины ответа.

Есть вопросы типа «сколько будет 2+2?», а есть - совершенно другого уровня, для решения которых требуется техника мышления и принятия решений, совершенно перпендикулярная тому, что заложено в основу работы всяких чатовГПТ. Так что, вы можете добавлять сколько угодно «G» в название текущей системы «ИИ» - умнее от этого она не станет и программу не напишет, пока соответствующие базовые «кубики» не будут созданы человеческим интеллектом. «Генерировать» и «собирать из готовых кубиков» - это разные виды деятельности)

vinvlad ★★
()

ИИ - это не «искусственный интеллект», а скорее «искуственный идиот». Из-за подмены понятий и агрессивного маркетинга, вещи, мягко говоря, называются не своими именами. А если, вы, на полном серьезе верили, что это может найти решение сложной математической задачи, то, как говориться... Изи.. Можно, с таким подходом, поверить в боженьку и пришельцев с Нибиру.

nager
()
Ответ на: комментарий от vinvlad

С какого бодуна «ИИ» должен проявлять такие способности?

Ну мы же не просим его решать задачи в рамках модальных логик 13-го порядка.

Хотя, наверное, пора бы уже.

i_am_not_ai
()
Ответ на: комментарий от i_am_not_ai

Ну мы же не просим его решать задачи …

Ну вы может где-то там у себя и не просите, а вот ТС попросил…))

А вообще конечно грустно, что так много молодых ребят-девчат купились на чистый маркетинг и вообразили, что теперь за них кто-то что-то будет программировать, а им осталось только запросы правильно формулировать…) Если такое и возможно, то только для ограниченного набора задач, решаемых на базе уже готовых библиотек классов и функций. И, естественно, такая «нейронка» должна быть предварительно обучена не абы кем, а авторами этих самых библиотек или теми, кто в них детально разбирается - ну т. е. эти «обучальщики» должны сами предварительно подготовить ответы на все потенциальные вопросы)

vinvlad ★★
()
Ответ на: комментарий от t184256

… Выйди на улицу и спроси у «ЕИ», ответы сравни.

И что? На улице можно встретить полно народу, вообще не обладающего никаким интеллектом )

vinvlad ★★
()
Ответ на: комментарий от vinvlad

[Есть вопросы] совершенно другого уровня, для решения которых требуется техника мышления и принятия решений, совершенно перпендикулярная тому, что заложено в основу работы всяких чатовГПТ

В основу GPT заложено «для того, чтобы предсказать следующее слово вероятно нужно обратить большее внимание на какие-то определенные слова» (см. «Attention is all you need»). На какие именно слова натренированная сеть обращает внимание, и как это влияет на её решение, никто толком не знает.

У меня есть подозрение, что никакой четкой границы между «2+2» и «задачами совершенно другого уровня» нет. С увеличением размера сети и объема обучающих данных сеть начнёт решать задачи, которые считались задачами «совсем другого уровня». Собственно так и происходит: можно поискать какие задачи, например, Гари Маркус считал нерешаемыми с помощью GPT-подобных систем 4 года назад, и какие он считает нерешаемыми сейчас.

Но, начиная с некоторого уровня задач, потребный размер сети и объем обучающих данных станут непрактичными.

Так что - да, теперь исследователи занимаются и поиском способов научить GPT-подобные сети создавать свои собственные «кубики», например, как это делала AlphaZero - попробовать несколько вариантов, посмотреть что получается, и модифицировать своё поведение по результатам.

red75prim ★★★
()
Последнее исправление: red75prim (всего исправлений: 1)
Ответ на: комментарий от user13

Чатбот не смог мне написать валидную программу для вычисления квадратного корня на перле, а ты от него просишь пересечение фигур...

Все эти чатботы не рассчитаны на решение задач. Они просто копипастят данные из интернета по ключевым словам и расставленным в базе ифам.

shell-script ★★★★★
()

я не смог найти в сети формулы которые бы решали мою проблему

И откуда по твоему нейросеть должна скопипастить тебе ответ?

ya-betmen ★★★★★
()

В таких случаях можно заменить токены в запросе на более общие, например, на PHP гораздо больше примеров в сети чем на С#, также triangle можно заменить более общим токеном triage или даже tria. Причины расписывать не буду, для простоты назовем это эрозией знаний сети с течением времени.

Запрос: write code on PHP for find intersection between two triages on sphere

Ответ:

<?php

function calculateIntersection($lat1, $lon1, $lat2, $lon2, $lat3, $lon3, $lat4, $lon4) {
    // Convert latitude and longitude to radians
    $lat1 = deg2rad($lat1);
    $lon1 = deg2rad($lon1);
    $lat2 = deg2rad($lat2);
    $lon2 = deg2rad($lon2);
    $lat3 = deg2rad($lat3);
    $lon3 = deg2rad($lon3);
    $lat4 = deg2rad($lat4);
    $lon4 = deg2rad($lon4);

    // Calculate the spherical angles of the triangles
    $angle1 = acos(sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($lon2 - $lon1));
    $angle2 = acos(sin($lat3) * sin($lat4) + cos($lat3) * cos($lat4) * cos($lon4 - $lon3));

    // Check if the triangles intersect
    if ($angle1 + $angle2 >= pi()) {
        return "The triangles intersect on the sphere.";
    } else {
        return "The triangles do not intersect on the sphere.";
    }
}

// Example usage
$lat1 = 40.7128; // Latitude of first triangle's first vertex
$lon1 = -74.0060; // Longitude of first triangle's first vertex
$lat2 = 34.0522; // Latitude of first triangle's second vertex
$lon2 = -118.2437; // Longitude of first triangle's second vertex
$lat3 = 51.5074; // Latitude of second triangle's first vertex
$lon3 = -0.1278; // Longitude of second triangle's first vertex
$lat4 = 48.8566; // Latitude of second triangle's second vertex
$lon4 = 2.3522; // Longitude of second triangle's second vertex

$result = calculateIntersection($lat1, $lon1, $lat2, $lon2, $lat3, $lon3, $lat4, $lon4);
echo $result;

?>

Судя по комментариям в коде запрос сеть поняла верно. Предлагается проверять пересечение сторон треугольников, итого для проверки всех сторон получится 9 вызовов функции. На вопрос что она использовала для решения ответила что «Spherical Trigonometry: For the Use of Colleges and Schools» by I. Todhunter.

Функцию не проверял, просто проверил можно ли выжать из сети хоть что-либо на эту тему. При желании, можно. Если логика верна то на С# переписать не проблема.

Obezyan
()
Ответ на: комментарий от red75prim

На какие именно слова натренированная сеть обращает внимание, и как это влияет на её решение, никто толком не знает.

А что там знать? Есть словарь токенов, есть токенизатор со своей логикой, у chatgpt это byte-level BPE который гоняет слова в числа и обратно. Всего около 50К токенов, каждый из которых вектор размерности ~13к.

У меня есть подозрение, что никакой четкой границы между «2+2» и «задачами совершенно другого уровня» нет.

Вы правы, единственная четкая граница у архитектуры transformers это размер словаря токенов.

Для сети вообще нет разницы «2+2» или «задачами совершенно другого уровня», она вообще не знает что это, не осознает себя и не видит ничего кроме внутреннего представления токенов и связей между ними с помощью токенизатора. Это не калькулятор, это сито которое просеивает токены так чтобы человек с максимальной вероятностью увидел в результате смысл. Иногда получается, иногда нет.

Obezyan
()

Вот что выдаёт бесплатный ИИ из телеги:

csharp
using System;

class Program
{
    static void Main(string[] args)
    {
        // Проверяем, что количество аргументов равно 4 (два многоугольника)
        if (args.Length != 4)
        {
            Console.WriteLine("Неверное количество аргументов");
            return;
        }

        // Проверяем, что каждый аргумент содержит 8 координат (4 точки)
        for (int i = 0; i < args.Length; i++)
        {
            string[] coordinates = args[i].Split(',');
            if (coordinates.Length != 8)
            {
                Console.WriteLine($"Неверное количество координат в аргументе {i + 1}");
                return;
            }
        }

        // Получаем координаты первого многоугольника
        double[] polygon1 = Array.ConvertAll(args[0].Split(','), double.Parse);

        // Получаем координаты второго многоугольника
        double[] polygon2 = Array.ConvertAll(args[1].Split(','), double.Parse);

        // Проверяем пересечение многоугольников
        bool intersection = CheckPolygonIntersection(polygon1, polygon2);

        // Выводим результат
        if (intersection)
        {
            Console.WriteLine("Многоугольники пересекаются");
        }
        else
        {
            Console.WriteLine("Многоугольники не пересекаются");
        }
    }

    static bool CheckPolygonIntersection(double[] polygon1, double[] polygon2)
    {
        // Проверяем пересечение каждой стороны первого многоугольника со сторонами второго многоугольника
        for (int i = 0; i < polygon1.Length; i += 2)
        {
            double x1 = polygon1[i];
            double y1 = polygon1[i + 1];

            double x2 = polygon1[(i + 2) % polygon1.Length];
            double y2 = polygon1[(i + 3) % polygon1.Length];

            for (int j = 0; j < polygon2.Length; j += 2)
            {
                double x3 = polygon2[j];
                double y3 = polygon2[j + 1];

                double x4 = polygon2[(j + 2) % polygon2.Length];
                double y4 = polygon2[(j + 3) % polygon2.Length];

                if (CheckLineIntersection(x1, y1, x2, y2, x3, y3, x4, y4))
                {
                    return true;
                }
            }
        }

        return false;
    }

    static bool CheckLineIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
    {
        // Проверяем пересечение двух отрезков на плоскости
        double denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
        if (denominator == 0)
        {
            return false;
        }

        double ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;
        double ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denominator;

        if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1)
        {
            return true;
        }

        return false;
    }
}

Rossiks
()
Последнее исправление: Rossiks (всего исправлений: 4)
Ответ на: комментарий от Rossiks

Вот что выдаёт бесплатный ИИ из телеги:

static bool CheckLineIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
{
  // Проверяем пересечение двух отрезков на плоскости
  ...

А теперь внимательно читаем промпт TC-а:

напиши программу на c# которая получает в аргументах массивы географических координат

Вопрос на засыпку: Вот получили вы некий сниппет кода от бесплатного или платного ИИ - что вы с ним дальше делаете?)

vinvlad ★★
()
Ответ на: комментарий от vinvlad

Это пример, водовода на один запрос.

Он явно отличается,от утверждения что ИИ не справляется.

Я думаю, если ИИ попытать, можно довести код, до стояния Ctrl-c Ctrl, ну или почти. А, не делать выводы, после одного не полного ответа.

Rossiks
()
Ответ на: комментарий от Obezyan

А что там знать?

А куда дели миллиарды связей, которые делают реальную работу по превращению входного вектора токенов в распределение вероятностей выходного токена?

red75prim ★★★
()
Ответ на: комментарий от Rossiks

Это пример, водовода на один запрос. Он явно отличается,от утверждения что ИИ не справляется.

Да тут хуже - поскольку в этом конкретном примере ИИ выдал ложный, но похожий на правду ответ, который невнимательный или просто доверчивый пользователь запросто мог заглотить и засунуть на прод.

Я думаю, если ИИ попытать, можно довести код, до стояния Ctrl-c Ctrl, ну или почти.

А вы так уверены, что все будут осмысленно «пытать», а не просто копипастить первое, что им предложат? Я не против отношения к чату просто как к альтернативному «поисковику», результаты которого надо тщательно перебирать, контролировать отбрасывая ложные. Но при чем здесь тогда «интеллект»? В том-то и проблема, что появилась достаточно обширная категория его «пользователей», которые всерьёз считают, что общаются с неким искусственным разумом, которому можно доверять))

vinvlad ★★
()
Последнее исправление: vinvlad (всего исправлений: 1)
Ответ на: комментарий от vinvlad

Да тут хуже

Смотря с какой стороны посмотреть, разработчика или пользователя ИИ. В первым случаи ИИ просто не стал решать поставленную задачу, во втором попытался решить задачу.

А вы так уверены, что все будут осмысленно «пытать», а не просто копипастить первое, что им предложат?

Здесь мне кажется, всё-таки больше виноват будет человек. Доверяй, но проверяй.

которые всерьёз считают, что общаются с неким искусственным разумом, которому можно доверять))

Раньше, и всё написано в интернете, принимали за чистую монету. Пообтерлись, не чего страшного не произошло. Опыт, сын ошибок трудных.

Единственное, в чем я уверен, это то что обычный поиск будет заменён аналогами GPT. А это мягко говоря, не есть хорошо.

Rossiks
()
Последнее исправление: Rossiks (всего исправлений: 4)

Здесь должен быть ваш алгоритм для определения пересечения многоугольников.

Чатбот развился и поумнел до уровня опытного специалиста-исполнителя, который, если видит, что от него требуют непропорционально зарплате, находит способ этого не делать, не нарушая условий контракта.

vaddd ★☆
()
Ответ на: комментарий от red75prim

Миллиарды связей в общем виде описываются количеством и типом слоев с их функцией активации. Если вы создавали сеть то это все видно прямо в коде, если используете готовую то model.summary() в Tensorflow покажет ее структуру:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 148, 148, 32)      896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 74, 74, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 72, 72, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2)(None, 36, 36, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 34, 34, 128)       73856     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2)(None, 17, 17, 128)       0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 15, 15, 128)       147584    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2)(None, 7, 7, 128)         0         
_________________________________________________________________
dropout (Dropout)            (None, 7, 7, 128)         0         
_________________________________________________________________
flatten (Flatten)            (None, 6272)              0         
_________________________________________________________________
dense (Dense)                (None, 512)               3211776   
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 513       
=================================================================
Total params: 3,453,121
Trainable params: 3,453,121
Non-trainable params: 0

Или Вам нужно миллиард связей в столбик написать?

Obezyan
()
Ответ на: комментарий от vinvlad

Да тут хуже - поскольку в этом конкретном примере ИИ выдал ложный, но похожий на правду ответ, который невнимательный или просто доверчивый пользователь запросто мог заглотить и засунуть на прод.

«доверчивый пользователь» и «прод» - выберте что-то одно. Ну джун может еще бездумно скопировать код с сети и вставить, но более опытные ребята понимают что ответственность никуда не девается и сеть можно использовать как удобный поисковик по ее обучающей выборке, не более того.

Obezyan
()
Ответ на: комментарий от Obezyan

Миллиарды связей в общем виде описываются количеством и типом слоев с их функцией активации

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

red75prim ★★★
()
Ответ на: комментарий от red75prim

Для выводов есть валидационная выборка из обучающего датасета (данные из которой сеть вообще не видела при обучении). После обучения сеть прогоняется на этой выборке и делается вывод о том - шум она выдает или смогла обобщить признаки.

Все обучение сводится к тому чтобы «поймать» такую комбинацию весов на заданной структуре сети (слои и типы активаций) чтобы ошибка была минимальной. Зачастую, необученой сети случайным образом назначают веса и потом обучают. Так делают несколько раз и потом выбирают наиболее удачную сеть, это как трясти мешок с кубиками каждый раз проверяя какими гранями кубики смотрят вверх после тряски.

Если же сколько мешок не тряси, а на валидационной выборке нужной точности нет то значит сеть недообучена или переобучена. В этих случаях меняют гиперпараметры сети и ее структуру (больше/меньше слоев, обрубание части связей, изменение функций активации и тд и тп). Есть эмпирические методы и как определить тип проблемы и в какую сторону что менять.

И все это делается не заглядывая в каждую конкретную связь между «нейронами» в слоях.

Obezyan
()
Ответ на: комментарий от Obezyan

Э? И что этот краткий курс начинающего специалиста в области машинного обучения должен был доказать?

Что «вот у нас система, работающая по понятным правилам (если забыть про миллиарды параметров, на которые всё-равно никто не смотрит), а значит это не интеллект»? Какая логическая связка используется в этом рассуждении? Если это понятно, то это не интеллект?

В общем одни вопросы.

Если же сколько мешок не тряси, а на валидационной выборке нужной точности нет то значит сеть недообучена или переобучена.

«Перетряхивать» GPT дорого выйдет (5 миллионов долларов для GPT-3). И, в общем-то, и не надо. Эмпирические законы масштабирования сетей основанных на трансформерах уже давно используются на практике.

Да и валидация генеративных сетей по валидационной выборке не используется, потому что вероятность слово-в-слово продолжить неизвестный текст очень близка к нулю. Используются другие способы оценки качества генерации, например перплекия и BERTScore.

red75prim ★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)