14 subscribers
38 photos
3 files
18 links
Download Telegram
#cv Каждый сверточный слой извлекает более сложные черты изображения; чем глубже слой в сети, тем шире его область восприятия, способная обрабатывать информацию с большей области изображения. Фильтры в конце сети могут активироваться на более абстрактных объектах, например, рукописном тексте или розовых предметах.
This media is not supported in your browser
VIEW IN TELEGRAM
#cv Обучение нейросети

Когда мы рождаемся, наши головы пусты. Мы не понимаем как распознать кошку, собаку или птицу.
Ситуация с СНС похожа: до момента построения сети, веса или значения, фильтры случайны. Фильтры не умеют искать границы и кривые.

Родители и учителя показывают нам разные картинки и изображения и присваивают им соответствующие ярлыки. Та же идея показа картинки и присваивания ярлыка используется в обучающем процессе, который проходит СНС.

Обучающий процесс корректировки фильтров или весов называют методом обратного распространения ошибки.

Его можно разделить на 4 блока:
- прямое распространение
- функцию потери
- обратное распространение
- обновление веса
.py
прямое распространение
#cv Прямое распространение

В первом обучающем примере, так как все веса или значения фильтра были инициализированы случайным образом, выходным значением будет что-то вроде
 [.1 .1 .1 .1 .1 .1 .1 .1 .1 .1]

(значения n-вектора) не дается предпочтения определенному числу

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

Допустим, первое обучающее изображение — это цифра 3.
Ярлыком изображения будет
[0 0 0 1 0 0 0 0 0 0]

Функция потери может быть выражена по-разному, но часто используется СКО (среднеквадратическая ошибка):
1/2 умножить на (реальность — предсказание) в квадрате
.py
По сути прототип зрительной коры мозга.
#cv Реакция нейронов зрительной коры человека на разные типы линий

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

https://www.youtube.com/watch?v=Cw5PKV9Rj3o&ab_channel=GIVN2SIN
.py
функцию потери
#cv функция потери

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

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

Веса нейронной сети (очевидно их больше, чем 2, но тут пример упрощен) это независимые переменные, а зависимая переменная — это потеря. Задача снизить потерю. Нам нужно приблизиться к самой нижней точке чашеподобного объекта. Для этого требуется найти производную потери (в данном графике — рассчитать угловой коэффициент в каждом направлении) с учётом весов).
Это эквивалент dL/dW, где W — веса определенного слоя.
#ml Основы. Методы обучения нейронных сетей.

1. Обучение с учителем (supervised learning) - при обучении нейронная сеть получает данные и их значение. Чтобы описать содержимое датасета, его просматривают вручную и размечают. Это делает человек или группа — тот самый условный учитель.

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

2. Обучение без учителя (unsupervised learning) - нейронная сеть получает на вход неразмеченные данные и старается сама найти в них общие признаки и закономерности.

Иногда полностью без разметки нейронная сеть обучиться неспособна, но получить много размеченных данных невозможно. В таких случаях используется частичное привлечение учителя: часть данных размечается, а часть передается в сыром виде. Это позволяет ускорить обучение и сделать его более точным. Например, так часто поступают с медицинскими данными — передают рентгеновские снимки, где патология однозначно обозначена лишь на небольшой части, а на других нейронная сеть учится ее распознавать.

Используются для:
- Кластерного анализа (разделение больших массивов данных на группы)
- Выявления аномалий (например, обучение нейронной сети сначала на "нормальных" данных, чтобы она могла обнаруживать выбросы при работе)
- Нахождения ассоциаций (определение критериев сходства между объектами и установление связей)

Проблемы:
Нейронная сеть может допустить ошибку: выделить неверные блоки данных, неправильно объединить объекты, найти несуществующие связи.
Обучение может потребовать больше данных и занять значительное время, поскольку нейронной сети нужно пройти много итераций для правильных выводов.

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

Используется для:
- Обучения машин механическим манипуляциям
- Управления транспортом
- Работы в техподдержке

Минусы:
Требуется очень много времени.
Необходимо множество реальных примеров.
#ml Основы. Выборка.

Обучающая выборка - данные для разработки модели

«Валидационная выборка» — данные для подбора оптимального набора гиперпараметров.

«Тестовая выборка» — данные позволяещие протестировать модель и являющиеся контрольным.
#ml Метрики моделей. Accuracy

отвечает на вопрос: как часто модель делает правильное предположение.

Accuracy = correct predictions/ all predictions



Проблема accuracy в случаях, где метки класса будут выявляться редко, например на рентген снимках. Представим что из выборки 100 снимков только 3 будут раковыми. Если обучить модель так, чтобы она рандомно ставила 97 процентов снимков без рака, тогда даже если она пропустила все 3 раковых снимка ее accuracy будет 0.97

accuracy - полезная метрика, когда вы имеете дело со сбалансированными классами и заботитесь об общей "правильности" модели, а не о способности предсказывать конкретный класс.

Accuracy легко объяснить и передать.

Если у вас есть несбалансированные классы, accuracy менее полезна, поскольку она придает равный вес способности модели предсказывать все категории. Сообщение о точности в таких случаях может ввести в заблуждение и скрыть низкую производительность для целевого класса.
#ml Используя confusion matrix, можно представить все 4 варианта исхода предположений в одной таблице.

Истинные позитивные TP (спам который модель обозначила спамом)

Ложные позитивные FP (письма не являющиеся спамом, но обозначенные моделью как спам)

Ложные негативные FN (спам принятый моделью за обычные письма)

Истинные негативные TN (обычные письма обозначенные обычными письмами)
#ml Метрики моделей. Precision (en точность) - отношение позитивных предсказаний модели к общему число позитивных предсказаний.

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

Плюсы:

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

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

Минусы:
- Точность не учитывает ложноотрицательные результаты (не учитывает случаи, когда мы пропускаем целевое событие)
#ml Метрики моделей. Recall

отношение позитивных пресказаний TP к общему количеству таргет класса в датасете. Recall отвечает на вопрос: может ли модель найти все экземпляры искомого класса.

плюсы:
- хорошо работает в дизбалансном датасете, т.к. фокусируется на способности модели находить все вхождения целевого класса
- полезен когда цена ложного негативного FN высока, когда вы хотите найти все объекты таргет класса

минусы обратны precision:
- не берет во внимание ложные позитивные FP

recall фокусируется на том чтобы модель нашла все вхождения целевого класса, не обращая внимания на то сколько классов будет помечено как целевой неправильно.
#ml Метрики моделей. F1 score.

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

Чем выше значение F1-меры, тем лучше модель справляется с балансированием точности и полноты в своих предсказаниях.
#ml Краткая история нейросетей. Part I.

В 1943 году в своей статье «Логическое исчисление идей, относящихся к нервной активности» Уоррен Мак-Каллок и Уолтер Питтс предложили понятие искусственной нейронной сети.

В 1957 году в Корнеллской лаборатории аэронавтики было успешно завершено моделирование работы перцептрона на компьютере IBM 704, а два года спустя, 23 июня 1960 года, в Корнеллском университете был продемонстрирован первый нейрокомпьютер — «Марк-1», который был способен распознавать некоторые буквы английского алфавита.

Перцептрон обучали с помощью метода коррекции ошибок.

В свое время из-за нехватки вычислительных мощностей сдал позиции.
#ml Краткая история нейросетей. Part II.

Уже ближе к концу 20-го века исследователи добились большого прогресса. Был разработан "Метод обратного распространения ошибки".

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

В дополнение к Методу исследователи придумали нелинейные функции активации. Они позволяют сети моделировать сложные взаимосвязи между входами и выходами.
This media is not supported in your browser
VIEW IN TELEGRAM
#ml Краткая история нейросетей. Part III.

В "нулевых" появились мощные графические процессоры и стали доступны большие объёмы данных, что привело к разработке алгоритмов Deep Learning. Результаты исследований начали демонстрировать высокие результаты в обучении и составлении прогнозов на основе больших объёмов данных.

Одной из самых прорывных историй является создание модели GPT-3 (Generative Pretrained Transformer 3) — языковой модели, разработанной OpenAI (они и создали ChatGPT). Модель была представлена в 2020 году и хорошо нашумела. Её натренировали на огромном количестве текстовых данных и научили выполнять разные языковые задачи.

В конце ноября 2022-го года в свет выходит ChatGPT и спустя 2 месяца пробивает отметку в 100 миллионов пользователей, получив статус самого быстрорастущего онлайн-сервиса за всю историю.
#ml Активационные функции

Сверточные нейронные сети СНС имеют архитектуру слоев, каждый слой с помощью суммы весов проецируемых фильтром сворачивает картинку.

То есть, вся нейросеть может быть представлена
линейной функцией
y = w * x

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

1. Relu - срезает все отрицательные значения в ноль. Этот свойство позволяет нейронной сети отсеивать слои, которые дают отрицательные значения и не имеют смысла в контексте нашей модели.
if input > 0:
return input
else:
return 0


2. Сигмоида

f(x) = 1/(1+e^-x)


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

3. Softmax
softmax([1, 2, 3]) = [0.09003, 0.24473, 0.66524]

принимает список произвольных чисел и преобразует их в список вероятностей пропорциональных этим числам. То есть:

Функция принимает вектор (список) входных данных — а не одно число. Это отличается от всех предыдущих, она работает сразу с несколькими нейронами (обычно со всем слоем).

4. Tanh

tanh(x) = 2 * sigmoid(2x)-1


Выходные значения tanh находятся в диапазоне от -1 до 1, что делает её центрированной относительно нуля. Это выгодно, поскольку это может помочь процессу обучения, так как данные, проходящие через сеть, в среднем будут поддерживать среднее значение близкое к 0, что в свою очередь помогает оптимизации методом градиентного спуска.

5. Binary Step Function (ступенчатая)

Бинарная ступенчатая функция — один из самых простых типов функций активации, используемых в нейронных сетях. Это пороговая функция активации, которая активируется или нет в зависимости от того, находится ли входное значение x выше или ниже определенного порога, что аналогично переключателю вкл/выкл. Обычно она используется в перцептронах и задачах бинарной классификации, где ожидается, что выход будет либо 0, либо 1, например, при решении, является ли электронное письмо спамом или не спамом.
#ml Переобучение и недообучение (дисперсия и смещение)

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

Смещение(недообучение) – это своего рода предубеждение модели, когда она не учитывает все особенности данных.

"С такой проблемой смещения сталкиваются достаточно часто. Один из проектов, над которым мы работали, касался анализа пользовательского поведения на сайте. Мы использовали данные, собранные в определенном регионе, но когда компания масштабировалась на всю страну, модель была неэффективна. Причина? Смещение – модель была обучена на слишком узком наборе данных."

Методы уменьшения смещения и дисперсии

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

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

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

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

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

L2 регуляризация полезна в ситуациях, когда количество признаков в данных велико или когда они сильно коррелированы. Она помогает справляться с мультиколлинеарностью, сохраняя все признаки, но уменьшая их влияние.

- Бэггинг
Бэггинг, или Bootstrap Aggregating, является ансамблевым методом, предназначенным для улучшения стабильности и точности моделей, снижения вариативности и избежания переобучения. Он основан на принципе объединения нескольких простых моделей для создания одной устойчивой и надежной модели.

- Бустинг
это ансамблевая стратегия, предназначенная для создания сильного классификатора из последовательности слабых классификаторов.Метод фокусируется на постепенном улучшении прогнозов путем исправления ошибок предыдущих моделей в ансамбле.
Существует несколько реализаций бустинга, в ихчисле: XGBoost, LightGBM, CatBoost.
В отличие от бэггинга, где модели обучаются независимо, бустинг обучает каждую новую модель, чтобы исправить ошибки, сделанные предыдущими. Это достигается путем увеличения весов для неправильно классифицированных примеров.

- Кросс-валидация
Кросс-валидация включает в себя разделение датасета на несколько подмножеств и последовательное обучение модели на этих подмножествах, что позволяет более точно оценить её способность к обобщению на новых данных.
#ml #cv Hello paddleOCR

[[[91.0, 104.0], [163.0, 106.0], [162.0, 125.0], [90.0, 123.0]], ('отец', 0.9746374487876892)],
[[[391.0, 238.0], [502.0, 238.0], [502.0, 255.0], [391.0, 255.0]], ('король', 0.9802486300468445)],
[[[732.0, 373.0], [792.0, 375.0], [791.0, 398.0], [731.0, 396.0]], ('шут', 0.965769350528717)]]]
#cv #ml
Как извлечь информацию на основе данных изображения

Эта задача обширно востребована. Распознавание форм, извлечение информации о билетах, извлечение информации об удостоверениях личности и т. д.

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

Извлечение ключевой информации (KIE) содержит 2 подзадачи:
- SER: распознавание семантического объекта, которое классифицирует каждый обнаруженный текст, например имя и удостоверение личности.
- RE: Извлечение отношений, классифицируйте каждый обнаруженный текст, например разделяя его на вопросы (ключ) и ответы (значение).
#cv #ml
Основные методы, основанные на глубоком обучении:

- Методы на основе сетки. Chargrid.
- Методы на основе токенов. BERT в нлп. LayoutLM, LayoutLMv2, LayoutXLM, StrucText. Сначала тренируется на больших наборах данных, чтобы дальше для улучшения требовался небольшой объем аннотированных данных.
- Методы на основе GCN: этот тип метода пытается изучить структурную информацию между изображениями и текстом, чтобы решить проблему извлечения информации из открытого набора (шаблоны, которые не были замечены в обучающем наборе), например GCN, SDMGR и другие алгоритмы.
- Сквозной метод: этот тип метода объединяет две существующие задачи: распознавание текста OCR и извлечение информации KIE в единую сеть для совместного обучения и усиливает друг друга в процессе обучения. Такие как Trie и другие алгоритмы.