Карты кохонена

1.1 Общее описание алгоритма

Cамоорганизующаяся карта Кохонена (Self-Organizing Map, SOM) представляет из себя вычислительный метод, предназначенный для задач, в первую очередь, кластеризации и визуализации, а также анализа данных из пространств высокой размерности (иначе, многомерных данных), полученных экспериментально. Методы был предложен Туево Кохоненом (1982). Прародителями модели самоорганизующейся сети Кохонена были ранние нейросетевые модели (в частности, модель ассоциативной памяти и модель адаптивного обучения).

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

Рис. 1. Общая структура карты Кохонена

Рис. 2а.Четырехугольная решетка слоя Кохонена

Рис. 2б.Шестиугольная решетка слоя Кохонена

Каждый нейрон выходного слоя определяется вектором весов (размерность вектора — есть разность входного пространства) и упорядоченной парой : (x,y), определяющую позицию нейрона на карте Кохонена.

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

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

Рождение Ханумана

Многие и различные истории о рождении Ханумана приводятся в Пуранической литературе и кратко перечислены ниже.

Семя извергнутое Шивой, чьи эротические чувства возбудились при виде Вишну, переодетого как красавица Мохини, было получено Саптарши и направлено в утробу Анджаны, и Хануман родился из него. (Шива Пурана, Сатарудра самхита).

Дашаратха разделил между своими женами божественный пудинг, полученный при проведении путракамешти яджны, который был приготовлен так, что мог дать благословение детьми. Так или иначе, змей схватил кусок пудинга и улетел с ним. На своем пути пудинг упал из пасти змея в руки Анджаны, которая делала тапас в лесу. Она съела пудинг и родился Хануман, сын Анджаны, так как пудинг обладал чрезвычайными свойствами. (Ананда Рамаяна).

Шива, однажды в своей свирепой и лучезарной форме вошел в Кесари, мужа Анджаны и совершил половой акт с ней. После этого Ваю (бога ветра) также имели половой акт с ней. Таким образом, в результате полового акта с обеими богами, Анджана забеременела. Позже, Анджана собиралась бросить в горной долине своего новорожденного ребенка, это было ужасным, но Ваю (бога ветра) вмешался и спас ребенка. Хануман, таким образом, был ребенком, родившимся от Шивы и Ваю. (Бхавишйа Пурана, Притисарга Парва).

Фактическим отцом Ханумана был Шива. Ганапати родился у Шивы и Парвати, когда они играли в лесу под видом слонов. После этого Шива и Парвати играла в лесу под видом обезьян, в результате чего Парвати забеременела. Парвати не нравилась идея быть матерью обезьяны и Шива, с помощью своей йогической силы вверил ребенка (в состоянии эмбриона), который был в утробе Парвати богу ветра Ваю, который носил его с собой повсюду, пока тот не стал созревшим, тогда он был отдан для рождения Анджане, самке обезьяны. Обезьяну, которую звали Кесари, была ее мужем. Таким образом Хануман родился как сын Анджаны.

Анджана также имеет свою собственную историю. Когда-то она была у Брихаспати служанкой по имени Пунджикастхала. Однажды она пошла собирать цветы, когда физическая близость других молодых женщин пленила ее так сильно, что ее эротические чувства пробудились очень сильно, не собрав цветов она вернулась домой и покрыла Брихаспати с поцелуями. Брихаспати был чрезвычайно рассержен недостойным поведением его служанки и проклял ее, превратив в самку обезьяны. Ей было сказано, что она проживет какое-то время с мужем обезьяной, а затем получит ребенка через энергию Шивы, после чего она вернется к Брихаспати как служанка. И, в соответствии с этим, Пунджикастхала стала самкой обезьяны по имени Анджана и жила в лесу со своим мужем — красивой обезьяной, которую звали Кесари.

Это было во время когда Анджана делала тапас, чтобы она могла забеременеть от Шивы, когда Шива и Парвати играли в лесу под видом обезьян, и Парвати задумала ребенка в конечном счете сделать сыном Анджаны.

Даже когда Анджана была беременна ребенком в своей утробе, она много страдала от рук Бали. Услышав от Нарады, что сын Шивы родится из утробы Анджаны, Бали опасался, что рождение такого сына поставит под угрозу его власть над обезьянами. Чтобы защититься от чрезвычайной угрозы, Бали, как советовал Нарада, выпустил пять металлов (золото, медь, железо, олово и цинк) в жидкой форме в желудок Анджаны. (Это средство вызывает аборт). Но, эта попытка потерпела неудачу. Вместо убийства ребенка пятью металлами в утробе Анджаны, они стали ушными украшениями, и Хануман, таким образом, родился с украшениями в ушах. (Камба Рамаяна Пурваканда).

Образование

Родившись от Шивы и за счет энергии Шивы в нем, Хануман достиг отрочества немедленно. Для изучения четырех Вед и шести шастр он мысленно выбрал Сурью, как своего наставника, и подошел к нему с просьбой изучить Веды и другие тексты. Surya согласился взять Ханумана в ученики при условии, что последнему не будет разрешено сидеть с Балакхильей в колеснице Сурьи и учиться

С открытой книгой в руках и сосредоточив свое внимание на лице Сурьи, Хануман пересек небо и в течение короткого периода в шестьдесят часов, он освоил все Веды и шастры основательно хорошо. Хотя Сурья сказал, что он будет обдумывать с большим интересом, какую с Ханумана взять дакшину (плата за обучение) Ханумана хотел, чтобы Сурья принять нечто большее, чем дакшина, и Сурья сказал следующее: «Если ты предлагаешь мне что-то большее, чем дакшина, я скажу тебе

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

Мантры

Кроме исполнения сорока разновидностей гимнов из «ХануманЧалиса», рекомендуется исполнять маленькие мантры, прославляющие доблесть и благородство Ханумана. От них исходят чистые вибрации энергии бхакти. С помощью них можно напитываться силой, храбростью, стойкостью и уверенностью. Они необходимы для обретения гармонии и духовного роста на пути саморазвития. Мантры помогают преодолевать испытания и соблюдать праведность. Они способны привести к познанию высших сфер бытия и поднять свою осознанность на более высокий уровень.

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

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

  1. Гаятри-мантра Ханумана, или «Хануман-гаятри», — модификация древнейшей и очень сильной Гаятри-мантры из «Ригведы» (III.62.10):

Om bhur bhuvah svahaTat savitur varenyamOm Andjaneyaa VidmaheVayuputraya DhimahiThanno Hanuman Prachodayat

  1. Мощная мантра достижения успеха:

Om Shri Hanumate Namaha

  1. Мантра силы через преданность:

Om Hum Hanumate Vijayam

  1. Мантра великому Хануману — вариация традиционной мантры Махавишну: «Oṁnamobhagavatevāsudevāya»:

Om namo bhagavate andjaneyaa

ТРЕНИРОВКИ

LITE (ЛАЙТ) — тренировки Cпециальная, облегченная программа предназначенная для новичков и людей
имеющим ограничения по здоровью, а так же для тех, кто хочет держать себя в
форме, сбросить лишний вес, научится контролировать своё тело, чувствовать
себя уверенно в конфликтных ситуации.

Лайт тренинг это:

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

1.10 Свойства алгоритма

Итак, вычислительная мощность алгоритма кластеризации самоорганизующимися сетями Кохонена равна

ComputationalPower(SOM) = \frac{TMn + M^2}{Mn + Tn} = \frac{M(Tn + M)}{n(M + T)}

Cоотношение последовательной и параллельной сложности алгоритма описано в п. 1.8

Детерминированность алгоритма зависит от способа генерации выборки из исходного входного пространства, если она
детерминирована, то и алгоритм детерминирован, иначе нет.

Общие свойства алгоритма:

  • Аппроксимация входного пространства. Карта признаков, представленная множеством векторов синоптических весов, в выходном пространстве реализует хорошую аппроксимацию входного пространства.
  • Топологический порядок. Карта признаков, полученная алгоритмом SOM, является топологически упорядоченной в том смысле, что пространственное положение нейронов в решетке соответствует конкретной области или признаку входного образа.
  • Соответствие плотности. Карта признаков отражает вариации в статистиках распределения входного сигнала. Области во входном пространстве, из которого берутся векторы \vec{x} с большей вероятностью, отображаются в гораздо большие области выходного пространства и, таким образом, с большим разрешением, чем области в исходном пространстве, из которых берутся векторы \vec{x} с меньшей вероятностью.
  • Выбор признаков. Для данных из входного пространства с нелинейным распределением самоорганизующаяся карта для аппроксимации исследуемого распределения способна извлечь набор наилучших признаков.

Преимущества алгоритма:

  • Является устойчивым, в том числе и к зашумленным данным;
  • Реализует быстрое и неуправляемое обучение (процесс самоорганизуюется);
  • Может визуализировать многомерные входные данные (упрощения многомерных входных данных с помощью визуализации);
  • Может аппроксимировать любую непрерывную функцию, что позволяет исследователю не принимать заранее какие-либо гипотезы относительно модели.

Недостатки алгоритма:

  • Работает только с вещественными числовыми векторами;
  • Может быть использован для кластерного анализа только в том случае, если заранее известно число кластеров;
  • Наличие искажений. Близкие объекты исходного пространства могут переходить в далёкие точки на карте;
  • Окончательный результат работы нейронных сетей сильно зависит от начальных установок сети (начальное распределение весов, свойства потенциальной функции).

1.4 Макроструктура алгоритма

В алгоритме обучения можно выделить 4 макрофазы:

Начальная инициализация всех весов: построение матрицы \mathbf{ W(0)} \in \mathbf {R^{N \times M}} , столбцами которой являются весовые вектора всех нейронов.

  • Выполнение следующих фаз \mathbf T раз:
    • Вычисление вектора расстояний \mathbf D \in \mathbf {R^M} , в котором хранятся вектора расстояний от вектора \mathbf X до векторов матрицы \mathbf {W(t)} .
    • Нахождение индекса минимума в векторе \mathbf D — индекса нейрона победителя;
    • Корректировка всех весов: получение матрицы \mathbf {W(t+1)}

В алгоритме работы алгоритма можно выделить две макрофазы:

  • Выполнение следующих фаз \mathbf K раз:
    • Вычисление вектора расстояний \mathbf D \in \mathbf {R^M} , в котором хранятся вектора расстояний от вектора \mathbf X до векторов матрицы \mathbf {W} .
    • Нахождение индекса минимума в векторе \mathbf D — индекса нейрона победителя и определение входного вектора в кластер, соответсвующий нейрону-победителю;

Также можно выделить математические операции, используемые в вышеприведенных:

  • \vec{x}^{T} \vec{y} — скалярное произведение вектров;
  • \vec{x} + \vec{y} — сложение двух векторов;
  • \lambda \vec{x} — умножение вектора на скаляр;
  • \min_i x_i — поиск минимального элемента в векторе \vec{x};
  • Вычисление функции соседства h_{ci}(t)

Получение имени и благословения

Как только Хануман родился, Анджана была освобождена от проклятия, и она захотела вернуться на небеса. Дитя обезьяны спросило свою мать, каково его будущее и какую он должен принести пользу в жизни. Она заверила его, что он никогда не будет уничтожен, и что фрукты, спелые, как восходящее солнце (она указала ему на солнце) будут составлять его еду. И Анджана вернулась на небеса.

Думая, что светящееся и сверкающее Солнце была пищей для него и должно быть съеденным, ребенок обезьяны сделал один прыжок к нему и близко приблизился к Солнцу. Но, видя Раху, больше чем Солнце, он прыгнул на него и попытался его съесть. Видя эти попытки ребенка обезьяны, Индра использовал свое оружие ваджраюдха (удар молнии) против него. Оружие достигло его подбородка и ранило, в тяжелом положении он упал на землю. Ваю (бог ветра), который увидел своего падающего ребенка раненым, унес его в Паталу. Тогда Вайю (воздух) покинул по этой причине землю, всё остановилось и стало безжизненным. Всё живое было на грани смерти от удушья. Тогда Брахма и другие пошли в Паталу, успокоили Ваю и радовались ребенку обезьяны. Ваджра Индры сделала шрам на его Хану (челюсти или подбородке) обезьяны ребенка и он был назван богами Ханумана, получив следующее благословления:

  • Брахма: Желаю тебе жить так долго, сколько существует Брахма.
  • Махавишну: Ты можешь жить всю жизнь как величайший преданный Богу.
  • Индра: никакое оружие любого рода не сможет ранить или поразить твое тело.
  • Агни: Огонь никогда не причинит тебе вреда.
  • Кала: Даже смерть не будет судьей тебе.
  • Все Дэвы: Не будет никого равного тебе по силе и скорости.
  • Брахма благословил Ханумана снова дав ему больше физической силы, чем Гаруде.
  • Вайю благословил его, чтобы он имел более высокую скорость, чем та которой обладает он сам.

(Вальмики Рамаяна, Балаканда, Песнь 15; Уттарарамаяна; Камбарарамаяна, Пурваканда; Адбхутарамаяна).

2.4 Масштабируемость алгоритма и его реализации

Вышеописанный алгоритм кластеризации был реализован с помощью технологии OpenMP и протестирован на суперкомпьютере Ломоносов.

Методология тестирования представляет из себя последовательные запуски:

  • с размером решетки Кохонена (решетки нейронов) 10×10, 30×30, 50×50, 70×70,90×90,110×110;
  • числом openmp_threads: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;
  • при размере входного пространства равном 4;
  • для обучающей выборки размером 400000 (4-x мерных) векторов;
  • для тестовой выборки размером 34874 (4-х мерных) вектора.

В результате было построено два графика (ссылки на интерактивные графики):

При этом по фронтальной оси X откладывается количество openmp_threads, по оси Y откладывается одно измерение размера матрицы (то есть если матрица была 50×50, то по оси будет отложено 50, по оси Z откладывается время обучения сети Кохонена для первого графика и время работы сети Кохонена для второго графика.

Анализ графиков позволяет сделать вывод о том, что алгоритм хорошо масштабируем — по графикам видно, что время обучения/работы сети Кохонена резко возрастает при одновременном уменьшении количества openmp_threads и увеличении размера решетки Кохонена (то есть, в конечном счете, числе кластеров).

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

Также было установлено, что при использовании вложенного параллелизма время работы существенно увеличивается, поэтому значение OMP_NESTED = 0.

Параллелизм реализован на уровне openmp_threads в следующих блоках кода:

  • расчет расстояний между нейронами в карте Кохохнена;
  • начальная инициализация нейронов;
  • поиск нейрона-победителя.

Облегченные вариации

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

Ардха Хануманасана

Ардха Хануманасана (Полушпагат)

  1. Выполните позу Собака Мордой Вниз.
  2. Шагните правой ногой к рукам, поставьте ее между ними;
  3. Опуститесь левой на колено, держа при этом вытянутой переднюю;
  4. Уводите бедра назад так, чтобы угол в колене левой ноги был 90 градусов;
  5. Тяните носок правой ноги на себя, чтобы полностью ее проработать;
  6. Устремите корпус к ней. Старайтесь при этом не сутулиться, расправьте плечи, шею держите прямой, плечи опущенными;
  7. Задержитесь в этом положении на 5-10 вдохов и выдохов.

Вариант с кирпичом

Вариация с опорой

Выполните позу полушпагата, затем постепенно разогните и вытяните заднюю ногу, при этом упирайтесь руками в коврик.
Не торопясь продвигайте стопу дальше и дальше.
Используйте блок (или несколько), чтобы подложить его под бедро вытянутой ноги.
Высота блока позволяет почувствовать глубокий результат от асаны при любом уровне растяжки.
Для полного натяжения мышц бедра, старайтесь тянуть позвоночник вверх.
Тяните пальцы задней ноги на себя, это важно для сохранения бедра на равной высоте относительно пола.
Задержитесь в позе на 5-10 глубоких вдохов и выдохов.
Можно попробовать убрать один из опорных блоков и задержаться еще на 5-10 дыханий, но лишь если вы комфортно ощущаете себя в асане.

1.6 Последовательная сложность алгоритма

Начнём рассмотрение сложности последовательной реализации алгоритма Кохонена «сверху – вниз» начиная со сложности максимально абстрактного набора функций и потом конкретизируя сложность каждой функции в рамках фундаментальных вычислительных операций (присваивание, суммирование и т.п.). Это позволяет пересчитать сложность алгоритма Кохонена при условии замены функции составляющих его основу и при реализации его на целевую платформу.

I АЛГОРИТМ ОБУЧЕНИЯ

1) Уровень набора функций

Complexity(SOMLearning) =
Complexity(SetAlgorithmParameters) +
Complexity(CalculateDistancesBetweenNeuronsInEuclidianPlane) +
Complexity(SetNeuronWeightsVector) +
T \cdot Complexity(ChooseInputVector) +
T \cdot Complexity(InitialiseDistancesVector) +
T \cdot M \cdot Complexity(CalculateDistanseBetweenInputVectorAndNeuronWeightsVector) +
T \cdot M \cdot Complexity(PutCalculatedDistanceToDistancesVector) +
T \cdot Complexity(FindNeuronWinner) +
T \cdot M \cdot Complexity(CorrectNeuronsWeightsVector)

2) Уровень реализации функций в рамках фундаментальных операций

Будем считать, что следующие операции выполняются за константное время (O(1)):

mov — присваивание
sqrt — взятие квадратного корня из числа
rand – генерация случайного числа
add — сложение
sub — вычитание
mul — умножение
comp — сравнение
exp — экспоненцирование
div — деление

Тогда:

Так как параметров всегда конечное число и мы делаем допущение, что это число меньше M и T:
Complexity(SetAlgorithmParameters) = O(Complexity(mov)) = O(1)
Complexity(CalculateDistancesBetweenNeuronsInEuclidianPlane) =
O(M \cdot (M-1) \cdot (2 \cdot Complexity(sub) + 2 \cdot Complexity(mul) +
Complexity(add) + Complexity(sqrt))) = O(M^2)
Complexity(SetNeuronWeightsVector) = O(Mn \cdot Complexity(mov)) \vee O(Mn \cdot Complexity(rand))) = O(Mn)
Complexity(ChooseInputVector) = O(n \cdot Complexity(mov))= O(n)
Complexity(InitialiseDistancesVector) = O(M \cdot n \cdot Complexity(mov)) = O(M \cdot n)
Complexity(CalculatedDistanseBetweenInputVectorAndNeuronWeightsVector) = O(n \cdot Complexity(sub)) +
O(n \cdot Complexity(mul)) + O((n — 1) \cdot Complexity(add)) = O(n)
Complexity(PutCalculatedDistanceToDistancesVector) = O(n \cdot Complexity(mov)) = O(n)
Complexity(FindNeuronWinner) = O(M \cdot n \cdot Complexity(comp)) = O(Mn)
Complexity(CorrectNeuronsWeightsVector) = O(nComplexity(add)) + O(nComplexity(mul)) +
O(Complexity(NeighborhoodFunction)) = O(n) + O(Complexity(NeighborhoodFunction)) = O(n) +
O(Complexity(exp) + Complexity(div)) = O(n)

3) Конечная сложность

Complexity(SOMLearning) = O(1) + O(M^2) + O(Mn) + O(Tn) + O(TMn) + O(TMn) + O(TMn) + O(TMn) + O(TMn) =
O(TMn) + O(M^2)

II АЛГОРИТМ РАБОТЫ

1) Уровень набора функций

Complexity(SOMWorking) =
T \cdot Complexity(ChooseInputVector) +
T \cdot Complexity(InitialiseDistancesVector) +
T \cdot K \cdot Complexity(CalculateDistanseBetweenInputVectorAndNeuronWeightsVector) +
T \cdot K \cdot Complexity(PutCalculatedDistanceToDistancesVector) +
T \cdot Complexity(FindNeuronWinner) +
T \cdot Complexity(DefineInputVectorToCluster)

2) Уровень реализации функций в рамках фундаментальных операций

Эквивалентно п.2 в Алгоритме обучения (но в качестве M у нас K).

Complexity(DefineInputVectorToCluster) = O(1)

3) Конечная сложность

Complexity(SOMWorking) = O(Tn) + O(TKn) + O(TKn) + O(TKn) + O(TKn) + O(T) = O(TKn)

1.9 Входные и выходные данные алгоритма

Входные данные алгоритма:

n — размерность исходного пространства,

\chi \subset R^n — обучающая выборка,

\Phi \subset R^n — тестовая выборка,

N = |\chi| — размер обучающей выборки,

K = |\Phi| — размер тестовой выборки,

a — высота слоя Кохонена,

b — ширина слоя Кохонена,

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

h_{ij}(t) — функция соседства между нейронами с индексами i и j на итерации t,

h(d,t) — функция от расстояния между нейронами,

\alpha(t) — скорость обучения сети,

\sigma(t) — функция, уменьшающая количество соседей с при увеличении итерации (монотонно убывающий).

Вычислительная сложность хранения входных данных для алгоритма обучения равна O(n \times N)
(установка функций и прочих параметров выполняется за константное время).

Вычислительная сложность хранения входных данных для алгоритма работы равна O(n \times K).

Выходные данные алгоритма обучения:

\vec{w}^{(j)}(t) = (w_1^{(j)}(t),…,w_n^{(j)}(t)), j = 1,..,M — вектор весовых коэффициентов для j-го нейрона,

матрица \mathbf{W}, представляющая веса нейронов \vec{w}^{(j)}(t)
Вычислительная сложность хранения выходных данных равна O(n \times M).

Выходные данные алгоритма работы:

Вычислительная сложность хранения выходных данных равна O(1), если алгоритм возвращает индекс кластера или координату нейрона,
иначе если возвращает вектор весов нейрона-победителя, то O(n)

ГЛАВНЫЙ ТРЕНЕР

Алмазов Георгий Олегович – основатель
бойцовского клуба HANUMAN
Гранд-мастер, профессионал международного
уровня со стажем более 20 лет.

Изучал боевые искусства (каратэ , тхэквондо , ушу),
за несколько лет изучения получил степени
мастера в различных видах. Прошёл обучение
у мастеров Муай Тай в священном монастыре.
В совершенстве изучив приёмы тайского бокса и
духовную составляющею боевого искусства
Таиланда Георгий Олегович участвовал в
профессиональных боях на родине Муай Тай в
Таиланде. Его соперниками были мастера из различных стран и континентов, но исход поединков был
всегда только один – нокаут и победа! За жёсткие и зрелищные
поединки он получил прозвище «сумасшедший русский».

После того, как Георгий Олегович получил звание Кру
(учитель) – он стал носителем древних традиций тайского бокса.
Диплом учителя он получил лично из рук господина
Сидйодтонг Сенана, великого мастера Муай Тай, отвечающего за продвижение Муай Тай во всем мире.

Георгий Олегович является официальным представителем в России, СНГ и странах Балтии
профессионального международного клуба по Муай Тай – «Lanna Muay Thai Boxing», известного в
Таиланде как «Kiat Busaba» – одной из пяти древнейших школ северного Таиланда.

1.5 Схема реализации последовательного алгоритма

Схему реализации последовательного алгоритма обучения запишем в виде псевдокода:

SetAlgorithmParameters()
CalculateDistancesBetweenNeuronsInEuclidianPlane()
W = SetNeuronWeightsVector()
FOR t = 1 to T do
  x = ChooseInputVector()
  D = InitialiseDistancesVector()
  FOR n = 1 to M do
    d = CalculateDistanseBetweenInputVectorAndNeuronWeightsVector(x,n)
    PutCalculatedDistanceToDistancesVector(D, d)
  END FOR
  ne_c = FindNeuronWinner(D)
  FOR n = 1 to M do
    CorrectNeuronsWeightsVector(W)
  END FOR
END FOR

Схему реализации последовательного алгоритма работы запишем в виде псевдокода:

FOR t = 1 to T do
  x = ChooseInputVector()
  D = InitialiseDistancesVector()
  FOR n = 1 to K do
    d = CalculateDistanseBetweenInputVectorAndNeuronWeightsVector(x,n)
    PutCalculatedDistanceToDistancesVector(D, d)
  END FOR
  ne_c = FindNeuronWinner(D)
  DefineInputVectorToCluster()
END FOR

Дадим комментарии по некоторым функциям:
SetAlgorithmParameters() — установка параметров алгоритма проводится исследователем для увеличения/уменьшения гранулярности кластеризации;

CalculateDistancesBetweenNeuronsInEuclidianPlane() — вычисление матрицы расстояний между всеми нейронами в Евклидовой плоскости, в соответствии с их расположением в слое Кохонена — эта информация потребуется CorrectNeuronsWeightsVector(W).

W = SetNeuronWeightsVector() — установка векторов веса нейронов (стратегии инициализации были рассмотрены выше: случайным образом, значениями из обучающей выборки, с помощью значений из пространства векторов, натянутого на главные компоненты);

x = ChooseInputVector() — выбор входного вектора из выборки (стратегия выбора также было рассмотрена выше: индекс вектора в обучающей выборке — реализация случайной величины из заданного распределения вероятностей, например);

D = InitialiseDistancesVector() — заполнение массива растояний нулями;

d= CalculateDistanseBetweenInputVectorAndNeuronWeightsVector(x,n) — вычисление расстояния между входным вектором и вектора веса нейрона по выбранной метрике (например, евклидовом);

PutCalculatedDistanceToDistancesVector(D, d) — добавление вычисленного расстояния между входным вектором и вектором веса текущего нейрона в массив расстояний;

ne_c = FindNeuronWinner(D) — нахождение нерона победителя, индекс которого является индексом минимума в массиве расстояний;

CorrectNeuronsWeightsVector(W) — корректировка весов нейронов по формуле: \vec{w}^{(j)}(t+1) := \vec{w}^{(j)}(t) +\alpha(t)h_{ci}(t);

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

Изображение

На рисунках Ханумана часто изображают с пятью головами и называют Панчамукхи. В таком виде он смог вызволить из неволи Раму и Лакшаману, когда они находились в Патале.

Все головы божества смотрят в разные стороны и излучают различные энергии.

  1. Львиная голова (Нарасимхи) олицетворяет победу над злыми демонами. Она обладает смелостью и не подвержена чувству страха.
  2. Голова Ханумана является символом победы над вражескими силами, уничтожения грехов, наполнения жизни благими мыслями и деяниями.
  3. Орлиная голова (Гаруда) соответствует победе над преградами и защищает от страшных духов.
  4. Кабанья голова (Варахи) вдохновляет на процветание и получение изобилия.
  5. Лошадиная голова (Хаягрива) дает мудрость и знания.

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

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

Традиционные изображения Ханумана содержат помимо него самого Раму, Ситу и Лакшману. У божества открыта грудь, как символ сохранения священных ликов внутри своего сердца.

VIP — тренировки

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

На кого ориентированы программы?
1. Бизнесмены
Жёсткий график? Вам удобно, когда на 100 % подстраиваются под Вас – то Вам
к нам.

2. Молодые мамы
Для Вас индивидуальные занятия тогда, когда удобно Вам и обычно неудобно
всем остальным 🙂 Нагрузка подбирается строго индивидуально, программа
занятий составлена так, чтобы не только быстро прийти в форму, но и снять
стресс.

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

Список источников

  • vohuman.ru
  • miryogi.com
  • www.hanumanboxing.ru
  • algowiki-project.org
Оцените статью
Добавить комментарий