Skip to content

Examples of how linear algebra may be of use to front-end developers

Notifications You must be signed in to change notification settings

o0/linear-algebra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

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

Что сделал Бартини? До войны он строил самолёты, которые ставили рекорды скорости, а в шестидесятые вообще придумал новую область в самолетостроении: экранопланов и экранолетов, самолетов, которые до сих пор считаются перспективными. При этом у Бартини не было сильного математического аппарата: он всегда полагался на расчёты других инженеров. Зато у него было кое-что другое.

Однажды в разговоре о том, как СССР ликвидировать техническое отставание от США, ему сказали что ликвидировать такое отставание невозомжно. На что он ответил: "А что, если бежать напреререз?"

Почему я вам это рассказываю?

Дело в том, что мы, приходим во фронтенд, считая, что это очень интересная и увлекательная область, что мы будем решать крутые задачи и что нам будут платить хорошие деньги. Но для большинства, путь в нашей профессия определен заранее. Новички, которые приходят во фронтенд, точно знают что они будут делать и что будут изучать. Новенькие разработчики выбирают между React и Vue и, если не повезет Angular. Есть даже заранее зафиксированный альтернативный путь: Elm или Clojure. Карьерный путь тоже кристалльно понятен: сначала ты работаешь джуном, потом мидлом, потом синьором и выбор у тебя появляется только к тому моменту, когда ты прокачиваешься ещё немного. Тут ты можешь решить больше менеджерских или программистских задач ты хочешь решать.

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

Линейная алгебра? Наверное, адекватная реакция на это заявление будет "Чувак, проспись, это митап школы вёрстки, какая алгебра, мне ещё в школе было скучно на алгебре. И это на обычной, а не на линейной". На самом деле линейная алгебра это просто инструмент, который помогает работать с большими наборами чисел, только и всего.

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

Умножение матриц, это когда одну матрицу, умножают на другую. Есть даже строгое правило, по которому это делается. После умножения, у нас получается матрица такого же размера как та, которая была слева, а её элементы рассчитываются по принципу "строка умножается на столбец". Вот как это работает:

          |3|
| 1 2 | x | |  = |1*3+1*4  2*3+2*4| = |7 14|
          |4|

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

Перед нами карта Меркатора. Я думаю, среди вас нет человека, который никогда в жизни её не видел. Все работает, но только эта карта искажает наше восприятие расстояний и размеров в реальном мире, например мы думаем что Гренландия такого же размера как Африка, а Россия больше Мексики по протяженности с севера на юг, но на самом деле это не так. На деле, Меркатор составил эту карту для простоты навигации ещё в шестнадцатом веке и у него не было задачи делать карту котроая сохраняет масштабы, она нужна для удобной навигации. Меридианы в этой карте параллельны, поэтому чтобы доплыть из одной точки в другую достаточно провести прямую линию по карте, измерить угол, а потом плыть так, чтобы стрелка компаса показывала всегда одно и то же отклонение. Расстояние будет не самым коротким, но при этом вообще не придётся париться о маршруте.

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

Но когда речь идет о мелких масштабах, для пользователя, нет ни одной причины использовать Меркатора. Это удобно программистам, чтобы на всех масштабах вычисления велись одинаково. Но ведь на таких масштабах Меркатор начинает искажать действительность и вводить нас в заблужение: ведь чем дальше от экватора, тем сильнее от растягивает расстояния. Оцените, какой из роудтрипов будет длиннее: Питер - Екатеринбург или роудтрип по Мексике? Если верить карте, то Питер - Екатеринбург. Но на деле, чтобы пересечь Мексику с севера на юг, нужно проехать на 500 километров больше.

Обратили внимание на примеры, с глобусом, которые я показывал? Где я его взял? В Гугле. Почему все продолжают использовать Меркатора а Гугл нет? Видимо, программисты Гугла решили не упрощать себе жизнь и нашли способ показать карты так, как это будет удобно пользователям. Но для этого им понадобилась линейная алгебра.

  • каждая точка земного шара это координата

  • когда мы зумим шар её нужно сначала заскейлить, а потом повернуть

  • но точек целый континент

  • можно каждую точку изменять по отдельности

  • а можно все точки записать в виде матрицы

  • матрицы трансформации

  • матрицы нужно умножить это тупая механическая работа

    • в результате мы получаем новую матрицу координат
    • матрицы трансформации можно накладывать друг на друга

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

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

 x  -   x  -  x
 x  -   x  -  x
 x  -   x  -  x
  • линал нужен не для работы нейронки, а для обучения
  • нейронка состоит из большого количества отдельных нейронов [рассказать детальней]
  • у каждого нейрона есть коэффициент
  • нейронка всегда работает одинаково, разница между нейронкой которая может распознать картинки или нет состоит в подборе коэффициента для каждого из нейронов
  • по ходу обучения нужно скорректировать коэффициент для каждого нейрона, не делать же это вручную. Именно тут используется линал
  • при распознавании тоже использется линал

В 2011 году в Формуле-1 произошла революция: появилась команда, которая сказала что больше не будет использовать аэродинамические трубы. Они сказали, что наступил 21 век и на компьютере можно посчитать всё. Они использовали вычислительную гидродинамику, в которой активно используется умножение матриц. Эта команда вышла на старт и с треском провалилась.

Это мощный инструмент, но это не волшебная палочка, которая решит все ваши задачи. Правильно - подбирать подходящий инструмент под задачу. И чем больше в наборе инструментов, тем выше шанс, что ты их подбёрешь.

About

Examples of how linear algebra may be of use to front-end developers

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published