• Обзор материалов по машинному обучению № 3 (16 — 23 апреля 2018 года)

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

      image
      Читать дальше →
    • RxJS: Не отписывайся

      Привет, Хабр! Представляю вашему вниманию перевод статьи "RxJS: Don’t Unsubscribe" автора Ben Lesh.

      Ну… ладно, просто не отказывайся от подписок.

      Я часто помогаю кому-нибудь в отладке проблем с их RxJS кодом, в том числе со структурированием приложений, которые несут в себе много асинхронного кода. При этом я всегда вижу одно и тоже, как люди держат обработчики на тоннах подписок. Разработчик делает 3 HTTP-запроса с Observable, сохраняя 3 объекта подписки, которые будут вызваны, когда произойдет какое-то событие.

      Я знаю, почему так происходит. Люди привыкли использовать `addEventListener` N раз, а затем, когда они больше не нужны, вызывать `removeEventListener` N раз. Естественным будет делать то же самое и с объектами-подписками, и по большей части вы будете правы. Но есть и лучшие способы. Сохранение слишком большого количества объектов подписок — это знак того, что вы управляете своими подписками императивно и не пользуетесь преимуществами Rx.
      Читать дальше →
    • Hyperapp для беженцев с React/Redux

      • Перевод

      image


      Я люблю Redux


      Именно благодаря Redux для меня началось путешествие в мир удивительного функционального программирования. И это первое из функциональщины, что я попробовал в production. Прошли те времена, когда я использовал DOM для хранения состояния и неуверенно манипулировал им с помощью jQuery.


      Redux — это инструмент для управления состоянием приложения (state), который позволяет полностью отделить его от представления (view). Представление (view) становится производным состояния (state), которое предоставляет пользователю интерфейс для его изменения. Действия пользователя (actions) не изменяют состояние (state) напрямую. Вместо этого они попадают в редюсер (reducer). Это такая чистая функция, которая на основе предыдущего состояния (state) и действия (action) генерирует следующее состояние (state). Такой подход к обновлению данных во многом был вдохновлен архитектурой языка программирования Elm и концепцией однонаправленного потока данных Flux. Это, возможно, самая популярная JavaScript-библиотека для иммутабельного изменения состояния из тех, что существуют сегодня. Авторы Redux сфокусировались на решении одной единственной проблемы — управление состоянием приложения (state), и сделали это хорошо. Redux получился достаточно модульным, чтобы работать с различными библиотеками для отображения представления (view).


      React использует аналогичный сфокусированный подход для представления (view), имеет эффективный виртуальный DOM, который можно подключить к DOM браузера, нативным мобильным приложениям, VR и прочим платформам.


      Что бы создавать надежные, функциональные и легко отлаживаемые web-приложения, можно использовать React и Redux. Правда, потребуются вспомогательные библиотеки вроде react-redux и куча boilerplate-кода. А можно попробовать Hyperapp.

      Читать дальше →
    • Глубинное обучение с подкреплением пока не работает

      • Перевод
      Об авторе. Алекс Ирпан — разработчик из группы Brain Robotics в Google, до этого работал в лаборатории Berkeley Artificial Intelligence Research (BAIR).

      Здесь в основном цитируются статьи из Беркли, Google Brain, DeepMind и OpenAI за последние несколько лет, потому что их работы наиболее заметны с моей точки зрения. Почти наверняка я что-то упустил из более старой литературы и от других организаций, так что прошу прощения — я всего лишь один человек, в конце концов.


      Введение


      Однажды в Facebook я заявил следующее.
      Когда кто-то спрашивает, может ли обучение с подкреплением (RL) решить их проблему, я сразу отвечаю, что не может. Думаю, что это верно как минимум в 70% случаев.
      Глубинное обучение с подкреплением сопровождается массой шумихи. И на то есть хорошие причины! Обучение с подкреплением (RL) — невероятно общая парадигма. В принципе, надёжная и высокопроизводительная система RL должна быть прекрасна во всём. Слияние этой парадигмы с эмпирической силой глубинного обучения очевидно само по себе. Глубинное RL — это то, что больше всего похоже на сильный ИИ, и это своего рода мечта, которая подпитывает миллиарды долларов финансирования.

      К сожалению, в реальности эта штука пока не работает.

      Но я верю, что она выстрелит. Если бы не верил, то не варился бы в этой теме. Но впереди куча проблем, многие из которых фундаментально сложны. Прекрасные демки обученных агентов скрывают всю кровь, пот и слёзы, что пролились в процессе их создания.
      Читать дальше →
    • Объёмное атмосферное рассеяние света

      • Перевод
      image

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

      GIF

      Статья разбита на следующие части:

      • Часть 1. Объёмное атмосферное рассеяние
      • Часть 2. Теория атмосферного рассеяния
      • Часть 3. Математика рэлеевского рассеяния
      • Часть 4. Путешествие сквозь атмосферу
      • Часть 5. Атмосферный шейдер
      • Часть 6. Пересечение атмосферы
      • Часть 7. Шейдер атмосферного рассеяния
      Читать дальше →
    • О классификации методов преобразования Фурье на примерах их программной реализации средствами Python

      • Tutorial

      Введение


      Публикации по методу Фурье условно можно разделить на две группы. Первая группа так называемых познавательных публикаций, например, [1,2].

      Вторая группа публикаций касается применения преобразований Фурье в технике, например, при спектральном анализе [3,4].

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

      Задачи публикации


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

      Гармонический анализ и синтез


      Гармоническим анализом называют разложение функции f(t), заданной на отрезке [0, Т] в ряд Фурье или в вычислении коэффициентов Фурье по формулам.

      Гармоническим синтезом называют получение колебаний сложной формы путем суммирования их гармонических составляющих (гармоник).

      Программная реализация
      #!/usr/bin/python
      # -*- coding: utf-8 -*
      from scipy.integrate import quad # модуль для интегрирования
      import matplotlib.pyplot as plt # модуль для графиков
      import numpy as np # модуль для операций со списками и массивами
      T=np.pi; w=2*np.pi/T# период и круговая частота
      def func(t):# анализируемая функция
               if t<np.pi:
                        p=np.cos(t)
               else:
                        p=-np.cos(t)
               return p
      def func_1(t,k,w):# функция для расчёта коэффициента a[k] 
               if t<np.pi:
                        z=np.cos(t)*np.cos(w*k*t)
               else:
                        z=-np.cos(t)*np.cos(w*k*t)
               return z
      def func_2(t,k,w):#функция для расчёта коэффициента b[k] 
               if t<np.pi:
                        y=np.cos(t)*np.sin(w*k*t)
               else:
                        y=-np.cos(t)*np.sin(w*k*t)
               return y
      a=[];b=[];c=4;g=[];m=np.arange(0,c,1);q=np.arange(0,2*np.pi,0.01)# подготовка списков для численного анализа
      a=[round(2*quad(func_1, 0, T, args=(k,w))[0]/T,3) for k in m]# интеграл для a[k], k -номер гармоники 
      b=[round(2*quad(func_2, 0, T, args=(k,w))[0]/T,3) for k in m]# интеграл для b[k], k -номер гармоники
      F1=[a[1]*np.cos(w*1*t)+b[1]*np.sin(w*1*t) for t in q]#функции для гармоник
      F2=[a[2]*np.cos(w*2*t)+b[2]*np.sin(w*2*t) for t in q]
      F3=[a[3]*np.cos(w*3*t)+b[3]*np.sin(w*3*t) for t in q]
      plt.figure()
      plt.title("Классический гармонический анализ функции \n при t<pi  f(t)=cos(t)  при t>=pi  f(t)=-cos(t)")
      plt.plot(q, F1, label='1 гармоника')
      plt.plot(q, F2 , label='2 гармоника')
      plt.plot(q, F3, label='3 гармоника')
      plt.xlabel("Время t")
      plt.ylabel("Амплитуда А")
      plt.legend(loc='best')
      plt.grid(True)
      F=np.array(a[0]/2)+np.array([0*t for t in q-1])# подготовка массива для анализа с a[0]/2
      for k in np.arange(1,c,1):
               F=F+np.array([a[k]*np.cos(w*k*t)+b[k]*np.sin(w*k*t) for t in q])# вычисление членов ряда Фурье
      plt.figure()
      P=[func(t) for t in q]
      plt.title("Классический гармонический синтез")
      plt.plot(q, P, label='f(t)')
      plt.plot(q, F, label='F(t)')
      plt.xlabel("Время t")
      plt.ylabel("f(t),F(t)")
      plt.legend(loc='best')
      plt.grid(True)
      plt.show()
      

      Читать дальше →
      • +6
      • 7,2k
      • 1
    • Библия движений Doom. Часть 1

      Здравствуйте и добро пожаловать в Библию движений Doom! В статье разобраны и рассортированы по категориям все причуды и капризы кода движений в Doom, включая замысловатые трюки с описанием их работы.



      Метрика


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

      Рассмотрим все поподробней.
      Благодаря только этому и паре переменных мы сможем определить возможные максимальные скорости персонажа игрока.

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

      Читать дальше →
      • +67
      • 33,5k
      • 9
    • Внутреннее устройство и оптимизация бандла webpack

        Webpack фактически стал стандартом для сборки крупных приложений на JS. Его используют практически все. Для разработчика webpack выглядит как магический черный ящик: если забросить в него файлы и небольшой конфиг, на выходе автоматически появится бандл.

        Чтобы разобраться в секретах этой магии, мы обратились к эксперту, человеку, который неоднократно залезал внутрь webpack, — Алексею Иванову. Он готов объяснить, как выглядит бандл изнутри, как на него влияют разные настройки, к чему и почему могут привести некоторые из них, а также рассказать, как все это отладить и оптимизировать.


        В основе материала — доклад Алексея Иванова на конференции HolyJS 2017, проходившей в Санкт-Петербурге 2-3 июня.
        Читать дальше →
      • Космическая съёмка Земли


          Cпутниковый снимок в ложных цветах (зелёный, красный, ближний инфракрасный) с пространственным разрешением 3 метра и наложенной маской зданий из OpenStreetMap (спутниковая группировка PlanetScope)

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

          В этой статье я постараюсь дать примерное представление о космической съёмке Земли, расскажу о трудностях, с которыми можно столкнуться, начиная работу со спутниковыми снимками: предварительная обработка, алгоритмы для анализа и библиотеки Python для работы со спутниковыми снимками и геоданными. Так что все, кому интересна область компьютерного зрения, добро пожаловать под кат!
          Читать дальше →
        • Шум Перлина

          • Перевод
          • Tutorial

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


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


          Вот пост, который я хотел бы прочитать в первую очередь.