Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение

Как работают ленивые вычисления

Время на прочтение10 мин
Количество просмотров44K
Маленькая Лямбда решила, что уборку в комнате можно отложить и на потом.

Ленивые вычисления — часто используемая методика при исполнении компьютером программ на Haskell. Они делают наш код проще и модульнее, но могут вызвать и замешательство, особенно когда речь заходит об использовании памяти, становясь для новичков распространённой ловушкой. Например, безобидно выглядящее выражение
foldl (+) 0 [1..10^8]
потребует для своего вычисления гигабайты памяти.

В этом руководстве я хочу объяснить, как работают ленивые вычисления и что они означают для времени выполнения и объёма памяти, затрачиваемыми программами на Haskell. Я начну рассказ с основ редукции графов, а после перейду к обсуждению строгой левой свёртки — простейшего примера для понимания и ликвидации утечек памяти.

Тема ленивых вычислений рассматривалась во многих учебниках (например, в книге Саймона Томпсона «Haskell — The Craft of Functional Programming»), но информацию о них, кажется, всё ещё проблематично найти в сети. Надеюсь, моё руководство посодействует решению этой проблемы.

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

Читать дальше →
Всего голосов 51: ↑49 и ↓2+47
Комментарии6

Курс о Deep Learning на пальцах

Время на прочтение2 мин
Количество просмотров174K
Я все еще не до конца понял, как так получилось, но в прошлом году я слово за слово подписался прочитать курс по Deep Learning и вот, на удивление, прочитал. Обещал — выкладываю!

Курс не претендует на полноту, скорее это способ поиграться руками с основными областями, где deep learning устоялся как практический инструмент, и получить достаточную базу, чтобы свободно читать и понимать современные статьи.

Материалы курса были опробованы на студентах кафедры АФТИ Новосибирского Государственного Университета, поэтому есть шанс, что по ним действительно можно чему-то научиться.


Читать дальше →
Всего голосов 117: ↑117 и ↓0+117
Комментарии31

Геометрия машинного обучения. Разделяющие гиперплоскости или в чём геометрический смысл линейной комбинации?

Время на прочтение13 мин
Количество просмотров47K
Во многих алгоритмах машинного обучения, в том числе в нейронных сетях, нам постоянно приходится иметь дело со взвешенной суммой или, иначе, линейной комбинацией компонент входного вектора. А в чём смысл получаемого скалярного значения?

В статье попробуем ответить на этот вопрос с примерами, формулами, а также множеством иллюстраций и кода на Python, чтобы вы могли легко всё воспроизвести и поставить свои собственные эксперименты.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии9

Принятие решений на основе математики: задача о проблеме секретаря

Время на прочтение7 мин
Количество просмотров14K

Настало время занимательных задач. Представьте, что вы снимаете квартиру в огромном городе. Как свести к минимуму риски при столь значимом выборе, когда вы ничего не знаете о вариантах заранее? На этот вопрос отвечает теория вероятности и задача о проблеме секретаря. Графики, рассуждения, немного кода на Julia — все подробности под катом.
Добро пожаловать!
Всего голосов 20: ↑17 и ↓3+21
Комментарии14

NumPy в Python. Часть 4

Время на прочтение8 мин
Количество просмотров114K

Предисловие переводчика


Всем здравствуйте, вот мы и подошли к конечной части. Приятного чтения!
Навигация:


Математика многочленов


NumPy предоставляет методы для работы с полиномами. Передавая список корней, можно получить коэффициенты уравнения:

>>> np.poly([-1, 1, 1, 10])
array([ 1, -11,   9,  11, -10])

Здесь, массив возвращает коэффициенты соответствующие уравнению: $x^4 - 11x^3 + 9x^2 + 11x - 10$.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии5

Краткий курс машинного обучения или как создать нейронную сеть для решения скоринг задачи

Время на прочтение28 мин
Количество просмотров217K
image

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

Если тебе интересно машинное обучение, то приглашаю в «Мишин Лернинг» — мой субъективный телеграм-канал об искусстве глубокого обучения, нейронных сетях и новостях из мира искусственного интеллекта.

Вопросы, которые разобраны в статье:

• Как собрать и подготовить данные для построения модели?
• Что такое нейронная сеть и как она устроена?
• Как написать свою нейронную сеть с нуля?
• Как правильно обучить нейронную сеть на имеющихся данных?
• Как интерпретировать модель и ее результаты?
• Как корректно оценить качество модели?
Поехали!
Всего голосов 51: ↑42 и ↓9+33
Комментарии43

Обучение и оценка модели с Keras

Время на прочтение25 мин
Количество просмотров106K


Это руководство охватывает обучение, оценку и прогнозирование (выводы) моделей в TensorFlow 2.0 в двух общих ситуациях:

  • При использовании встроенных API для обучения и валидации (таких как model.fit(), model.evaluate(), model.predict()). Этому посвящен раздел «Использование встроенных циклов обучения и оценки»
  • При написании кастомных циклов с нуля с использованием eager execution и объекта GradientTape. Эти вопросы рассматриваются в разделе «Написание собственных циклов обучения и оценки с нуля».

В целом, независимо от того, используете ли вы встроенные циклы или пишете свои собственные, обучение и оценка моделей работает строго одинаково для всех видов моделей Keras: Sequential моделей, созданных с помощью Functional API, и написанных с нуля с использованием субклассирования.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии5

Библиотеки для глубокого обучения: Keras

Время на прочтение13 мин
Количество просмотров171K

Привет, Хабр! Мы уже говорили про Theano и Tensorflow (а также много про что еще), а сегодня сегодня пришло время поговорить про Keras.


Изначально Keras вырос как удобная надстройка над Theano. Отсюда и его греческое имя — κέρας, что значит "рог" по-гречески, что, в свою очередь, является отсылкой к Одиссее Гомера. Хотя, с тех пор утекло много воды, и Keras стал сначала поддерживать Tensorflow, а потом и вовсе стал его частью. Впрочем, наш рассказ будет посвящен не сложной судьбе этого фреймворка, а его возможностям. Если вам интересно, добро пожаловать под кат.


image
Читать дальше →
Всего голосов 55: ↑55 и ↓0+55
Комментарии13

Нейронные сети для начинающих. Часть 2

Время на прочтение14 мин
Количество просмотров570K


Добро пожаловать во вторую часть руководства по нейронным сетям. Сразу хочу принести извинения всем кто ждал вторую часть намного раньше. По определенным причинам мне пришлось отложить ее написание. На самом деле я не ожидал, что у первой статьи будет такой спрос и что так много людей заинтересует данная тема. Взяв во внимание ваши комментарии, я постараюсь предоставить вам как можно больше информации и в то же время сохранить максимально понятный способ ее изложения. В данной статье, я буду рассказывать о способах обучения/тренировки нейросетей (в частности метод обратного распространения) и если вы, по каким-либо причинам, еще не прочитали первую часть, настоятельно рекомендую начать с нее. В процессе написания этой статьи, я хотел также рассказать о других видах нейросетей и методах тренировки, однако, начав писать про них, я понял что это пойдет вразрез с моим методом изложения. Я понимаю, что вам не терпится получить как можно больше информации, однако эти темы очень обширны и требуют детального анализа, а моей основной задачей является не написать очередную статью с поверхностным объяснением, а донести до вас каждый аспект затронутой темы и сделать статью максимально легкой в освоении. Спешу расстроить любителей “покодить”, так как я все еще не буду прибегать к использованию языка программирования и буду объяснять все “на пальцах”. Достаточно вступления, давайте теперь продолжим изучение нейросетей.
Читать дальше →
Всего голосов 46: ↑42 и ↓4+38
Комментарии37

Стоимость денег, типы процентов, дисконтирование и форвардные ставки. Ликбез для гика, ч.1

Время на прочтение9 мин
Количество просмотров63K
Представьте себе ситуацию – вы покупаете машину, и вам предлагают два варианта: заплатить с рассрочкой в несколько месяцев или погасить всю сумму сразу и с небольшой скидкой. Какой окажется выгоднее?

Или, например, вы хотите разместить вклад на год. Можно положить на весь срок под высокий процент или на отдельные короткие сроки под более низкий. Что лучше и насколько?



Все ответы под катом. И добро пожаловать в мир, где время — всегда деньги. До этого вы знали об этом, но теперь — в деталях и с примерами.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+39
Комментарии13

Теория инвестиций для начинающих, часть 2

Время на прочтение22 мин
Количество просмотров30K
Пауль де Вос. Бык, поверженный собаками. 1638–1640 гг. Музей Прадо, Мадрид.

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

  • как составить оптимальный с точки зрения риска и доходности портфель, не углубляясь в суровую математику (посмотреть на рыночную капитализацию активов);
  • как заработать что-то сверх безрисковой процентной ставки (взять на себя риск и на дистанции заработать премию за этот риск);
  • любой ли риск вознаграждается премией (нет, только систематический);
  • от чего зависит ожидаемая будущая доходность отдельной акции (главным образом, от ковариации со всем рынком);
  • сколько зарабатывали инвесторы в рынок акций США (порядка 7–9% в год сверх безрисковой ставки);
  • почему так много (возможно, люди не полностью рациональны и преувеличивают рискованность акций);
  • можно ли предсказать будущую доходность рынка акций (скорее всего, нет);
  • как осадить трейдера на коктейльной вечеринке (спросить, какой у него Шарп).
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии18

Цивилизация Пружин, 5/5

Время на прочтение10 мин
Количество просмотров46K

Часть 5. В масштабе Вселенной


Предыдущая часть. Краткое содержание предыдущей части.

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


Читать дальше →
Всего голосов 206: ↑205 и ↓1+204
Комментарии234

Цивилизация Пружин, 4/5

Время на прочтение21 мин
Количество просмотров54K

Часть 4. Дороги и перекрёстки.


Предыдущая часть и её краткое содержание.


Читая этот раздел, следует понимать: всё, здесь перечисленное, либо не работает, либо… потенциально опасно. Ибо всякая возможность направлять и концентрировать энергию находит в первую очередь военное применение. Чингисхан подчинил полконтинента, направив энергию растущей травы (через лошадей) на военные нужды. Англия колонизировала половину планеты, оседлав энергию ветра. Первые быстрые концентраторы химической энергии — нефтяные зажигательные снаряды и пороховые бомбы. Двигатель внутреннего сгорания таскал на себе броню двух мировых войн по полям и болотам, и продолжает обслуживать бесчисленные столкновения по всему миру. А атомная энергия сначала принесла миру бомбу, и лишь затем — мирный реактор. Любая возможность обуздать новые потоки энергии, сконцентрировать её, либо быстро высвободить наверняка отслеживается военными.

Но если каждый пункт в разделе — фантазия или война, то зачем писать? Не лучше ли промолчать?

Мда… «Хотелось бы побыть страусом, да пол бетонный.» Я верю, что писать надо. Если что-то работает, пусть об этом знают все. Если нет — что ж, пусть задумаются тоже все.

Как-то так.

Приступим.
Читать
Всего голосов 171: ↑171 и ↓0+171
Комментарии271

Цивилизация Пружин, 3/5

Время на прочтение10 мин
Количество просмотров58K

Часть 3. Цивилизация пружин



[Image credit: By Lothar Spurzem — Own work, CC BY-SA 2.0 de, commons.wikimedia.org/w/index.php?curid=39574590]

Предыдущая часть. Краткое содержание предыдущей серии.

Итак, какие же ещё есть способы хранения энергии, помимо химического топлива? Пусть даже не для ракет, а вообще?

Начнём с электрической батареи. Вот хотя бы литиево-ионной. Откуда в ней берётся энергия?

Всё просто, там идёт[210] электрохимическая реакция:

LiC6 + CoO2 <-> C6 + LiCoO2

Идёт налево — песнь за заряжается. Направо — разряжается.
Вы, конечно, уже догадались
Всего голосов 201: ↑198 и ↓3+195
Комментарии110

Цивилизация Пружин, 2/5

Время на прочтение7 мин
Количество просмотров50K

Часть 2. Very Heavy Fuel


Предыдущая часть 1



Перед вами — Международная Космическая Станция. Массой в 420 тонн и стоимостью[20] в $150 миллиардов:



Её кинетическая энергия, старое доброе E = mv2/2, составляет 1.3*1013 джоулей. Добавив потенциальную энергию на высоте 400 километров, получим 1.4*1013 Дж.

Сколько бензина надо сжечь, чтобы получить эту энергию? Оказывается, не так уж и много. 350 тонн всего. Это примерно[200] однодневный энергетический бюджет Улан-Удэ.

Как же так получается, что далеко не самый богатый город мира за один-единственный день распоряжается энергией, достаточной для разгона МКС до орбитальной скорости, однако же станция у нас на весь мир одна, и стоит неприлично бешеных денег?
Читать
Всего голосов 143: ↑141 и ↓2+139
Комментарии156

Цивилизация Пружин, 1/5

Время на прочтение14 мин
Количество просмотров109K
### Часть 1. Золотое «Ку»

Лет в шесть мне попался в руки дедовский справочник[50] по грузовым автомобилям середины 20-го века. Добротный, напечатанный на гладкой плотной бумаге раритет. Единственное, что вообще осталось на память от деда после распада страны, войн и переездов.



В справочнике содержалось множество интересных ТТХ, так что слово «грузоподъёмность» стало мне знакомо с раннего детства. И когда отец на прогулке упомянул, что любой грузовик весит столько же, сколько увозит сам, я это запомнил. Запомнил и, много позже, заинтересовался.

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

Читать дальше →
Всего голосов 237: ↑230 и ↓7+223
Комментарии266

Коты в коробочках, или Компактные структуры данных

Время на прочтение12 мин
Количество просмотров28K

image


Как быть, если дерево поиска разрослось на всю оперативку и вот-вот подопрет корнями соседние стойки в серверной? Что делать с инвертированным индексом, жадным до ресурсов? Завязывать ли с разработкой под Android, если пользователю прилетает «Память телефона заполнена», а приложение едва на половине загрузки важного контейнера?


В целом, можно ли сжать структуру данных, чтобы она занимала заметно меньше места, но не теряла присущих ей достоинств? Чтобы доступ к хэш-таблице оставался быстрым, а сбалансированное дерево сохраняло свои свойства. Да, можно! Для этого и появилось направление информатики «Succinct data structures», исследующее компактное представление структур данных. Оно развивается с конца 80-х годов и прямо сейчас переживает расцвет в лучах славы big data и highload.


А тем временем на Хабре найдется ли герой, способный пересковоговорить три раза подряд
[səkˈsɪŋkt]?

Читать дальше →
Всего голосов 127: ↑127 и ↓0+127
Комментарии43

Трехмерный движок в коде… ДНК

Время на прочтение40 мин
Количество просмотров23K
UPD 29 ноября: Репозиторий с кодом ДНК выложен на GitHub.
github.com/pallada-92/dna-3d-engine

UPD 30 ноября:
В англоязычном твиттере заметили проект
Новость попала в топ-10 на HackerNews!






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

Ответ довольно неожиданный — lingua franca для моделирования сложных процессов в клетках является реакции вида
Эти реакции моделируются при помощи закона действующих масс, который одинаково работает и в химии, и в молекулярной биологии.

— Неужели при помощи этих примитивных реакций можно что-то программировать?
— Да, а то, что написано выше, вычисляет $B = \sqrt{A}$.

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

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

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

Для понимания статьи никаких предварительных знаний не требуется, необходимые сведения из школьной программы по биологии мы повторим в начале статьи. Также мы разберем типичные паттерны, которые использует эволюция для достижения сложного поведения в живых клетках.
Всего голосов 94: ↑94 и ↓0+94
Комментарии30

Трехмерный движок внутри запроса SQL

Время на прочтение8 мин
Количество просмотров41K
Несколько лет назад на форуме SQL.ru решили провести сравнение реализаций трассировщиков лучей на разных языках программирования. К сожалению, моя заявка не может участвовать т.к. она не выводит надпись «PIXAR», поэтому публикую ее здесь.

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

WITH RECURSIVE numbers AS (SELECT 0 AS n UNION ALL SELECT n+1 FROM numbers WHERE n<89),
pixels AS (SELECT rows.n as row, cols.n as col FROM numbers as rows CROSS JOIN
numbers as cols WHERE rows.n > 4 AND rows.n < 38 AND cols.n > 9 AND cols.n < 89),
rawRays AS (SELECT row, col, -0.9049 + col * 0.0065 + row * 0.0057 as x,
-0.1487 + row * -0.0171 as y, 0.6713 + col * 0.0045 + row * -0.0081 as z FROM pixels),
norms AS (SELECT row, col, x, y, z, (1 + x * x + y * y + z * z) / 2 as n FROM rawRays),
rays AS (SELECT row, col, x / n AS x, y / n AS y, z / n AS z FROM norms),
iters AS (SELECT row, col, 0 as it, 0 as v FROM rays UNION ALL
SELECT rays.row, rays.col, it + 1 AS it, v + MAX(ABS(0.7+v*x) - 0.3,
ABS(0.7+v*y) - 0.3, ABS(-1.1+v*z) - 0.3, -((0.7+v*x) * (0.7+v*x) +
(0.7+v*y) * (0.7+v*y) + (-1.1+v*z) * (-1.1+v*z)) * 1.78 + 0.28) AS v
FROM iters JOIN rays ON rays.row = iters.row AND rays.col = iters.col WHERE it < 15),
lastIters AS (SELECT it0.row, it0.col, it0.v AS v0, it1.v AS v1, it2.v AS v2
FROM iters as it0 JOIN iters AS it1 ON it0.col = it1.col AND it0.row = it1.row
JOIN iters AS it2 ON it0.col = it2.col AND it0.row = it2.row
WHERE it0.it = 15 AND it1.it = 14 AND it2.it = 13),
res AS (SELECT col, (v0 - v1) / (v1 - v2) as v FROM lastIters)
SELECT group_concat(
substr('$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^. ',
round(1 + max(0, min(66, v * 67))), 1) || CASE WHEN col=88 THEN X'0A' ELSE '' END, '')
FROM res;



Здесь можно покрутить кубик

Под катом построчный разбор запроса. Как обычно, достаточно знания основ SQL и школьной математики.
Читать дальше →
Всего голосов 169: ↑168 и ↓1+167
Комментарии24

Трехмерный движок на формулах Excel для чайников

Время на прочтение9 мин
Количество просмотров70K


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

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

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

Осторожно: 19 картинок и 3 анимации под катом.
Читать дальше →
Всего голосов 211: ↑209 и ↓2+207
Комментарии54
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность