<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

    <title>Записная книжка</title>
    <link href="http://192.168.1.4:4000/feed.xml" rel="self"/>
    <link href="http://192.168.1.4:4000/"/>
    <updated>2025-05-02T10:16:03+03:00</updated>
    <id>http://192.168.1.4:4000</id>
    <author>
        <name>Владимир Быстрицкий</name>
        <email>vbystricky@gmail.com</email>
    </author>

    
    <entry>
        <title>Dropout в нейронных сетях.</title>
        <link href="http://192.168.1.4:4000/2024/10/dropout.html"/>
        <updated>2024-10-27T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2024/10/dropout</id>
        <content type="html"><p>Сегодня поговорим об одном методе борьбы с переобучением нейронных сетей. Статья [1], где этот метод был впервые описан вышла в 2012 году, и
рассказывала о <em>Dropout</em> в применении к обычным нейронным сетям (т.е. состоящим из полносвязных слоёв). Рецепт выглядел достаточно просто: давайте на
каждом шаге тренировки случайным образом выключать часть нейронов, однако, результаты получались очень не плохие.</p>

<p>В дальнейшем, методика развивалась, как в сторону уточнений вида: “какой процент нейронов отключать на каждом этапе тренировки?” или “какие именно
нейроны выключать с большей вероятностью?”. Так и в сторону применения данной методики не только к полносвязным слоям, но и к свёрточным или
рекуррентным сетям.</p>

</content>
    </entry>
    
    <entry>
        <title>Нормализация в нейронных сетях.</title>
        <link href="http://192.168.1.4:4000/2024/01/normalization_layers.html"/>
        <updated>2024-01-02T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2024/01/normalization_layers</id>
        <content type="html"><p>В своё время мы разбирались с <a href="/2020/05/batch_normalization.html">batch normalization</a>, заметив, что ее использование приносит большую
пользу при тренировке. В этот раз попробуем собрать вместе несколько (все, которые мне известны на данный момент) вариантов <em>нормализации признаков</em>.</p>

</content>
    </entry>
    
    <entry>
        <title>Сигналы на графах, свёртки и полиномы Чебышева.</title>
        <link href="http://192.168.1.4:4000/2021/07/graph_chebyshev_polynomials.html"/>
        <updated>2021-07-19T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2021/07/graph_chebyshev_polynomials</id>
        <content type="html"><p>Еще раз поговорим про сигналы на графах. И о том как быстро считать свёртки сигнала с использованием полиномов Чебышева. Нужно это нам для того, чтобы
собирать свёрточные сети на графах. Хотя исходно это разбиралось в [1] для навешивание на графы вейвлет преобразований.</p>

</content>
    </entry>
    
    <entry>
        <title>Графы, процесс загрубления, кластеризация</title>
        <link href="http://192.168.1.4:4000/2021/07/graph_coarsing_clustering.html"/>
        <updated>2021-07-14T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2021/07/graph_coarsing_clustering</id>
        <content type="html"><p>В <a href="/2021/06/graph_laplacian_clusters_etc.html">прошлый раз</a> разобрали некоторые общие моменты связанные с графами, теперь поговорим
подробнее про разбиение графов на части, т.е. кластеризацию. Мы не будем заходить в какие-то очень тонкие детали, возможно позже разберём конкретные
статьи, пока хочется получить представление о двух вещах: первая - это <em>загрубление графа</em> - т.е. алгоритмы уменьшающие размер графа, сохраняя его
структурные свойства, вторая - это собственно кластеризация графа (в основном будем разбирать <em>спектральную кластеризацию</em>).</p>

</content>
    </entry>
    
    <entry>
        <title>Графы, лапласиан, кластера и т.п.</title>
        <link href="http://192.168.1.4:4000/2021/06/graph_laplacian_clusters_etc.html"/>
        <updated>2021-06-23T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2021/06/graph_laplacian_clusters_etc</id>
        <content type="html"><p>Графы и всевозможные алгоритмы с ними связанные, раньше входили в тройку лидеров по популярности в разнообразных книжках про программирование, наряду
с алгоритмами сортировки и поиска. Теория графов область весьма обширная и пытаться объять её во всей полноте возможных задач в одной статье (или даже
в нескольких статьях) совершенно бесполезно, народ пишет серьёзные толстые книжки и при этом тоже далеко не о всех возможных аспектах рассказывает.</p>

<p>Однако, есть желание не особо углублясь во всякого рода хроматические числа, гамильтоновы циклы и прочие познавательные вещи, разобраться с некоторыми
базовыми наработками в теории графов и отталкиваясь от них перейти к нейронным сетям на этих графах построенных.</p>

</content>
    </entry>
    
    <entry>
        <title>RNN, LSTM, GRU и другие рекуррентные нейронные сети.</title>
        <link href="http://192.168.1.4:4000/2021/05/rnn_lstm_gru_etc.html"/>
        <updated>2021-05-10T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2021/05/rnn_lstm_gru_etc</id>
        <content type="html"><p>Поразбираемся с одним интересным классом нейронных сетей, которые называются <em>рекуррентные нейронные сети</em>. Это сети, которые обычно используются в
случае, когда входные или выходные данные представляют из себя последовательность элементов, упорядоченных по времени. Например, это может быть
предложение состоящие из слов, видео как набор кадров, и т.п.</p>

</content>
    </entry>
    
    <entry>
        <title>YOLO, SSD и другие.</title>
        <link href="http://192.168.1.4:4000/2020/08/yolo_ssd_etc.html"/>
        <updated>2020-08-10T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2020/08/yolo_ssd_etc</id>
        <content type="html"><p>Мы уже рассматривали два современных подхода к детектированию объектов на изображении при помощи свёрточных нейронных сетей:
<a href="/2017/06/rcnn_etc.html">R-CNN, FastRCNN, FasterRCNN</a> и <a href="/2017/02/overfeat_cnn.html">Overfeat</a>. Самое время разобраться с
еще одним классом детекторов в который входят: YOLO, SSD и т.п.</p>

</content>
    </entry>
    
    <entry>
        <title>CIFAR10 и много графиков.</title>
        <link href="http://192.168.1.4:4000/2020/06/cifar10_etc.html"/>
        <updated>2020-06-20T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2020/06/cifar10_etc</id>
        <content type="html"><p>Это будет такая в некотором роде техническая запись, где почти совсем не будет теоретических умствований, зато будет много графиков (я очень люблю
графики, почти так же как формулы).</p>

<p>Базовым датасетом мы выберем <a href="https://www.cs.toronto.edu/~kriz/cifar.html">CIFAR10</a>, с одной стороны он уже не такой тривиальный как MNIST и
значит на нем можно смотреть на достаточно тонкие вещи, с другой он не такой большой как ImageNet, например, а значит можно провести серию
экспериментов даже на лаптопе с крайне слабой видеокартой и не умереть от старости ожидая когда они закончатся.</p>

</content>
    </entry>
    
    <entry>
        <title>Batch Normalization. Основы.</title>
        <link href="http://192.168.1.4:4000/2020/05/batch_normalization.html"/>
        <updated>2020-05-31T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2020/05/batch_normalization</id>
        <content type="html"><p><em>Batch Normalization</em> - одна из тех методик (или даже <em>Tips&amp;Tricks</em>), которая существенно упростила тренировку, а следовательно и использование
нейронных сетей в различных задачах. Понятно, что взлет ракетой нейронных сетей, за последние 5+ лет, обязан в основном серьёзному увеличению
возможностей железок. Но удалось бы добиться такого рапространия нейронных сетей, и особенно глубоких нейронных сетей без batch normalization?</p>

<p>Главные наблюдаемые достоинства batch normalization это ускорение тренировки (в смысле уменьшения количества итераций для получения нужного
качества) и некая допускаемая вольность в подборе параметров: и инициализации весов сети, и <em>learning rate</em> и других метапараметров обучения.
Таким образом ценность batch Normalization для нейронных сетей сложно преувеличить, а значит есть смысл разобраться: что это такое и откуда
проистекает польза при применении.</p>

</content>
    </entry>
    
    <entry>
        <title>Tensorflow (часть вторая)</title>
        <link href="http://192.168.1.4:4000/2019/05/tensorflow_p2.html"/>
        <updated>2019-05-05T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2019/05/tensorflow_p2</id>
        <content type="html"><p>Продолжаем разбираться с Tensorflow. Будем смотреть на вспомогательные операции, которые позволяют усложнить граф вычислений таким образом, чтобы поток
данных мог идти по разным путям, в зависимости от содержимого этих данных. Но начнем мы с операции, которая позволит нам логировать сам процесс 
выполнения вычислений в графе.</p>

</content>
    </entry>
    
    <entry>
        <title>Tensorflow</title>
        <link href="http://192.168.1.4:4000/2019/04/tensorflow.html"/>
        <updated>2019-04-27T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2019/04/tensorflow</id>
        <content type="html"><p><a href="http://tensorflow.org">Tensorflow</a> - это набор инструментов машинного обучения с открытым исходным кодом.</p>

</content>
    </entry>
    
    <entry>
        <title>Mask R-CNN</title>
        <link href="http://192.168.1.4:4000/2018/07/mask_rcnn.html"/>
        <updated>2018-07-29T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2018/07/mask_rcnn</id>
        <content type="html"><p>Разберём статью [1], в которой описана сеть, решающая задачу <em>сегментации экземпляра объекта</em> (<em>object instance segmentation</em>). Авторы предлагают сеть,
которую они назвали Mask R-CNN. Mask R-CNN берёт за основу <a href="/2017/06/rcnn_etc.html#faster-r-cnn">Faster R-CNN</a> и добавляет к ней 
дополнительную ветвь. Эта ветвь на выходе должна выдать маску объекта в дополнение к ограничивающему прямоугольнику и классу.</p>

</content>
    </entry>
    
    <entry>
        <title>Алгоритмы оптимизации типа градиентного спуска</title>
        <link href="http://192.168.1.4:4000/2018/03/optimization_grad_desc.html"/>
        <updated>2018-03-25T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2018/03/optimization_grad_desc</id>
        <content type="html"><p>При тренировки нейронной сети применяются различные алгоритмы оптимизации, большинство из них являются усовершенствованием стохастического
градиентного спуска, хочется иметь их все (про которые я знаю) на одной странице.</p>

</content>
    </entry>
    
    <entry>
        <title>MNIST, нейронные сети и свёрточные нейронные сети</title>
        <link href="http://192.168.1.4:4000/2017/10/mnist_cnn.html"/>
        <updated>2017-10-21T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/10/mnist_cnn</id>
        <content type="html"><p>Про обычные и свёрточные нейронные сети. Почему свёрточные нейронные сети хороши для работы с изображениями. И немного о датасете MNIST.</p>

</content>
    </entry>
    
    <entry>
        <title>Генеративно-состязательная сеть</title>
        <link href="http://192.168.1.4:4000/2017/09/gan.html"/>
        <updated>2017-09-07T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/09/gan</id>
        <content type="html"><p>Генеративно-состязательная сеть (<em>Generative adversarial network</em>) это методика обучения пары моделей:</p>

<ol>
  <li>
    <p>генеративной $G$, которая по случайному шуму генерирует данные, подчинённые некоторому вероятностному распределению, и</p>
  </li>
  <li>
    <p>дискриминативной $D$, которая приписывает, поступающим на её вход данным, вероятность того, что они получены из тренировочного датасета или 
сгенерированы моделью $G$.</p>
  </li>
</ol>

<p>Т.е. модель $G$ обучается таким образом, чтобы максимизировать вероятность того, что $D$ ошибётся. А модель $D$ тренируется отличать подмену реальных
данных от тех, которые сгенерировала сеть $G$. Таким образом мы получаем как бы игру для двух игроков.</p>

</content>
    </entry>
    
    <entry>
        <title>R-CNN, Fast R-CNN, Faster R-CNN etc.</title>
        <link href="http://192.168.1.4:4000/2017/06/rcnn_etc.html"/>
        <updated>2017-06-14T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/06/rcnn_etc</id>
        <content type="html"><p>Возвращаемся к задаче детектирования объектов на изображении. Один из подходов к решению данной задачи был рассмотрен, когда разбирали сеть 
<a href="/2017/02/overfeat_cnn.html">OverFeat</a>. В данном тексте разберем конструкцию, которая впервые была предъявлена в статьях [1] и [2], а 
затем усовершенствована в статьях [3] и [4].</p>

</content>
    </entry>
    
    <entry>
        <title>"Мягкое" подавление немаксимумов</title>
        <link href="http://192.168.1.4:4000/2017/04/soft_nms.html"/>
        <updated>2017-04-23T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/04/soft_nms</id>
        <content type="html"><p>При детектировании, классически используется связка из двух подходов <em>сдвигающегося окна</em> (<em>sliding window</em>) и <em>подавления немаксимумов</em> (
<em>non-maximum suppression</em>). Последнее время, большое распространения для решения задачи детектирования получили свёрточные нейронные сети, в которых 
сдвигающееся окно не применяется, но и при использовании CNN на определенном этапе работы алгоритма возникает необходимость в подавление немаксимумов,
поскольку обычно генерируется достаточно большое количество дублей для каждого объекта на снимке. В рассматриваемой статье [1] как раз и предлагается
усовершенствование алгоритма подавления немаксимумов.</p>

</content>
    </entry>
    
    <entry>
        <title>Выделения объектов для семантической сегментации при помощи "состязательного стирания".</title>
        <link href="http://192.168.1.4:4000/2017/03/sem_segm.html"/>
        <updated>2017-03-27T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/03/sem_segm</id>
        <content type="html"><p>Задача семантической сегментации изображения заключается в том, чтобы назначить каждому пикселю этого изображения некоторый класс из заранее заданных.
Например, определить какие пиксели на изображении относятся к человеку, какие к сидящему у этого человека на коленях коту, а какие к некоему заднику
(background) и не могут быть классифицированы. Современный подход к решению этой задачи, как собственно и многих других, заключается в применении
свёрточных нейронных сетей. Этот подход показывает прекрасные результаты. Проблема, однако, как и всегда в случае применения нейронных сетей
заключается в необходимости получить значительные объемы, размеченных для тренировки, данных. При этом в случае семантической сегментации,
трудоёмкость задачи разметки крайне высока. Потому что для каждого изображения надо сформировать попиксельную маску классов.</p>

</content>
    </entry>
    
    <entry>
        <title>Spatial Pyramid Pooling структура в свёрточной нейронной сети</title>
        <link href="http://192.168.1.4:4000/2017/03/spp_net.html"/>
        <updated>2017-03-08T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/03/spp_net</id>
        <content type="html"><p>Любая свёрточная нейронная сеть, применяемая для классификации объектов, структурно легко разделяется на две части. Первая состоит из свёрточных 
(<em>convolution</em>) и объединяющих (<em>pooling</em>) слоёв (сюда же все нелинейности, LRN, batch normalization и т.п.) и по исходной картинке формирует 
трёхмерную матрицу особенностей (<em>features</em>). Вторая часть сети является классификатором, который, взяв набор особенностей, выдаёт класс объекта на 
изображении (вернее вектор sofmax с вероятностями для каждого класса).</p>

<p>Статья [1] предлагает использовать <em>spatial pyramid pooling</em> слой между свёрточной частью и классификатором, чтобы иметь возможность классифицировать
изображения произвольных размеров (в разумных пределах).</p>

</content>
    </entry>
    
    <entry>
        <title>Задача о "многоруком бандите" (часть 3)</title>
        <link href="http://192.168.1.4:4000/2017/02/rl_multi_arms_bandits_p3.html"/>
        <updated>2017-02-25T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/02/rl_multi_arms_bandits_p3</id>
        <content type="html"><p>Разберем еще одну стратегию решения задачи о “многоруком бандите”.</p>

</content>
    </entry>
    
    <entry>
        <title>Сверточная нейронная сеть OverFeat</title>
        <link href="http://192.168.1.4:4000/2017/02/overfeat_cnn.html"/>
        <updated>2017-02-19T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/02/overfeat_cnn</id>
        <content type="html"><p>OverFeat - модель сверточной нейронной сети, описанная в [1], которая предназначена для того, чтобы одновременно (т.е. одной сетью) решать
три задачи: детектировать объект, классифицировать его и уточнять положение на снимке (<em>detection, recognition, and localization</em>).</p>

</content>
    </entry>
    
    <entry>
        <title>Задача о "многоруком бандите" (часть 2)</title>
        <link href="http://192.168.1.4:4000/2017/02/rl_multi_arms_bandits_p2.html"/>
        <updated>2017-02-04T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/02/rl_multi_arms_bandits_p2</id>
        <content type="html"><p>Продолжим разбираться с многоруким бандитом. Разберем способ оценки математического ожидания в случае когда распределение случайной величины
меняется со временем, а также посмотрим как влияет на жадную стратегию выбор начальной оценки математического ожидания награды.</p>

</content>
    </entry>
    
    <entry>
        <title>Задача о "многоруком бандите" (часть 1)</title>
        <link href="http://192.168.1.4:4000/2017/01/rl_multi_arms_bandits.html"/>
        <updated>2017-01-28T00:00:00+03:00</updated>
        <id>http://192.168.1.4:4000/2017/01/rl_multi_arms_bandits</id>
        <content type="html"><p>Задача является модельной для понимания конфликта между <em>exploitation</em> (<em>применение</em>, <em>эксплуатация</em>) и 
<em>exploration</em> (<em>изучение</em>, <em>исследование</em>).</p>

</content>
    </entry>
    

</feed>