Microsoft разработала аппаратную платформу для машинного обучения. Компьютер для машинного обучения


Аппаратное обеспечение для глубокого обучения / Блог компании ИТ-ГРАД / Хабр

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

Попробуем взглянуть на примеры аппаратных решений, связанные с работой по осваиванию темы deep learning'а. Ну и затронем немного теории.

/ Фото Berkeley Center for New Media CC

Создавая систему глубокого обучения, определенно стоит задуматься об использовании ГП. Повышение производительности, которое он дает, слишком велико, чтобы его игнорировать. Эксперты советуют обращать внимание на такие модели как GTX 680 (ограниченных бюджет) и GTX Titan X (дорогое решение для свертки) или GTX 980 (лучшее решение за свои деньги).

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

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

Размер кэша центрального процессора не играет большой роли при обмене данными между ЦП и ГП. В глубоком обучении наборы данных, обычно, слишком большие, чтобы уместиться в кэше, и для каждой новой mini-batch выборки данные приходится читать из памяти — поэтому в любом случае понадобится постоянный доступ к оперативной памяти.

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

Пропускная способность имеет значение только тогда, когда вы копируете большие объемы данных. Она определяет, насколько быстро может быть переписана и размещена mini-batch, чтобы можно было начать инициализацию передачи данных графическому процессору.

При прямом доступе к памяти (ПДП) задача будет состоять в правильном осуществлении передачи, что позволить обойтись более дешевой и медленной памятью. Это можно делать асинхронно и без потерь в производительности. Частота оперативной памяти не имеет значения.

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

/ Фото UnknownNet Photography CC

Относительно хранения больших объемов данных все в целом понятно: скорее всего, вы будете хранить одну его часть на жёстком диске или SSD, другую часть в оперативной памяти и третью часть (две небольшие выборки) в памяти графического процессора. Например, если вы работаете с большим набором 32-битных данных, то вам определенно понадобится SSD, так как жесткие диски со скоростью 100-150 Мб/сек слишком медленные и не будут поспевать за ГП. Многие покупают SSD просто для удобства, но для глубокого обучения он необходим только в том случае, если размерность входных данных велика, и вы не можете их эффективно сжать.

Идем дальше. Охлаждение. Оно безусловно будет влиять на производительность в большей степени, чем это делает плохое аппаратное обеспечение. Во время работы современные ГП повышают свою частоту и энергопотребление до максимума, но как только температура процессора достигает 80 °C, скорость сбрасывается, чтобы избежать превышения температурного порога. Этот подход гарантирует наилучшую производительность.

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

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

Материнская плата должна иметь достаточное количество PCIe портов, чтобы на ней можно было закрепить все ГП. PCIe 2.0 подойдет для одного ГП, но PCIe 3.0 обладает лучшими показателями цена/производительность. Выбор материнской платы — в целом простая задача: выбирайте ту, которая поддерживает нужное вам аппаратное обеспечение.

Большие мониторы, которые позволят продуктивно работать и контролировать ситуацию — лучшее вложение средств. Разница между одним и тремя мониторами огромна, советуем обратить на это внимание.

habr.com

Что такое машинное обучение и почему оно может лишить вас работы

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

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

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

Что такое машинное обучение

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

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

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

Quantamagazine.org

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

Почему машинное обучение — это важно

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

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

Помимо прочего, машины могут слушать нас и отвечать. Виртуальные ассистенты в наших смартфонах — будь то Siri, Cortana или Google Now — воплощают прорывы в машинной обработке естественного языка и продолжают развиваться.

Ibtimes.co.uk

Кроме того, компьютеры учатся писать. Алгоритмы машинного обучения уже генерируют новостные статьи. Они могут писать о финансах и даже спорте.

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

Как машинное обучение применяют сегодня

Алгоритмы машинного обучения уже способны впечатлить.

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

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

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

Недавно IBM опросиларуководителей автомобильных компаний. 74% из них ожидают появления на дорогах умных машин уже к 2025 году.

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

Чего ждать от машинного обучения в будущем

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

  • Персонализированная система здравоохранения, предоставляющая пациентам индивидуальную медицинскую помощь с учётом их генетического кода и образа жизни.
  • Защитные программы, которые с высочайшей точностью вычисляют хакерские атаки и вредоносное ПО.
  • Компьютеризированные системы безопасности для аэропортов, стадионов и других подобных мест, выявляющие потенциальные угрозы.
  • Самоуправляемые автомобили, которые ориентируются в пространстве, минимизируют количество пробок и аварий на дорогах.
  • Продвинутые системы защиты от мошенников, способные обезопасить деньги на наших счетах.
  • Универсальные переводчики, которые позволят нам получать точный и быстрый перевод с помощью смартфонов и других умных устройств.

Почему вам стоит следить за машинным обучением

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

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

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

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

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

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

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

lifehacker.ru

Подборка фреймворков для машинного обучения / Блог компании Parallels / Хабр

В последние годы машинное обучение превратилось в мейнстрим небывалой силы. Эта тенденция подпитывается не только дешевизной облачных сред, но и доступностью мощнейших видеокарт, применяемых для подобных вычислений, — появилась ещё и масса фреймворков для машинного обучения. Почти все из них open source, но куда важнее то, что эти фреймворки проектируются таким образом, чтобы абстрагироваться от самых трудных частей машинного обучения, делая эти технологии более доступными широкому классу разработчиков. Под катом представлена подборка фреймворков для машинного обучения, как недавно созданных, так переработанных в уходящем году. Если у вас все хорошо с английским, то статья в оригинале доступна здесь.

Apache Spark MLlib

Apache Spark больше всего известен благодаря своей причастности к семейству Hadoop. Но этот фреймворк для обработки данных внутри памяти (in-memory) появился вне Hadoop, и до сих пор продолжает зарабатывать себе репутацию за пределами этой экосистемы. Spark превратился в привычный инструмент для машинного обучения благодаря растущей библиотеке алгоритмов, которые можно быстро применять к находящимся в памяти данным.

Spark не застыл в своём развитии, его алгоритмы постоянно расширяются и пересматриваются. В релизе 1.5 добавлено много новых алгоритмов, улучшены существующие, а также в Python усилена поддержка MLlib, основной платформы для решения математических и статистических задач. В Spark 1.6, помимо прочего, благодаря непрерывным конвейерам (persistent pipelines) появилась возможность приостановки и продолжения выполнения задач Spark ML.

Apache Singa

Фреймворки «глубинного обучения» используются для решения тяжёлых задач машинного обучения, вроде обработки естественных языков и распознавания изображений. Недавно в инкубатор Apache был принят open source-фреймворк Singa, предназначенный для облегчения тренировок моделей глубокого обучения на больших объёмах данных.

Singa обеспечивает простую программную модель для тренировки сетей на базе кластера машин, а также поддерживает многие стандартные виды тренировочных заданий: свёрточные нейронные сети, ограниченные машины Больцмана и рекуррентные нейронные сети. Модели можно тренировать синхронно (одну за другой) и асинхронно (совместно), в зависимости от того, что лучше подходит для данной проблемы. Также Singa облегчает процесс настройки кластера с помощью Apache Zookeeper.

Caffe

Caffe — фреймворк глубинного обучения. Он сделан «с расчётом на выразительность, скорость и модульность». Изначально фреймворк создавался для проектов машинного зрения, но с тех пор развился и теперь применяется и для других задач, в том числе для распознавания речи и работы с мультимедиа.

Главное преимущество Caffe — скорость. Фреймворк целиком написан на С++, поддерживает CUDA, и при необходимости умеет переключать поток обработки между процессором и видеокартой. В пакет поставки входит набор бесплатных и open source референсных моделей для стандартных задач по классификации. Также немало моделей создано сообществом пользователей Caffe.

Microsoft Azure ML Studio

Учитывая огромный объём данных и вычислительной мощности, необходимый для машинного обучения, облака являются идеальной средой для ML-приложений. Microsoft оснастила Azure собственным сервисом машинного обучения, за который можно платить только по факту использования — Azure ML Studio. Доступны версии с помесячной и почасовой оплатой, а также бесплатная (free-tier). В частности, с помощью этой системы создан проект HowOldRobot.

Azure ML Studio позволяет создавать и тренировать модели, превращать их в API для предоставления другим сервисам. На один пользовательский аккаунт может выделяться до 10 Гб места ля хранения данных, хотя можно подключить и собственное Azure-хранилище. Доступен широкий спектр алгоритмов, созданных Microsoft и сторонними компаниями. Чтобы попробовать сервис, не надо даже создавать аккаунт, достаточно войти анонимно, и можно гонять Azure ML Studio в течение восьми часов.

Amazon Machine Learning

У Amazon есть свой стандартный подход к предоставлению облачных сервисов: сначала заинтересованной аудитории предоставляется базовая функциональность, эта аудитория что-то из неё лепит, а компания выясняет, что же на самом деле нужно людям.

То же самое можно сказать и про Amazon Machine Learning. Сервис подключается к данным, хранящимся в Amazon S3, Redshift или RDS, он может выполнять двоичную классификацию, многоклассовую категоризацию, а также регрессию по указанным данным для создания модели. Однако этот сервис завязан на Amazon. Мало того, что он использует данные, лежащие в принадлежащих компании хранилищах, так ещё и модели нельзя импортировать или экспортировать, а выборки данных для тренировок не могут быть больше 100 Гб. Но всё же это хороший инструмент для начала, иллюстрирующий, что машинное обучение превращается из роскоши в практический инструмент.

Инструментарий для распределённого машинного обучения Microsoft (Microsoft Distributed Machine Learning Toolkit)

Чем больше компьютеров вы можете задействовать для решения проблемы машинного обучения, тем лучше. Но объединение большого парка машин и создание ML-приложений, которые эффективно на них выполняются, может быть непростой задачей. Фреймворк DMTK (Distributed Machine Learning Toolkit) предназначен для решения проблемы распределения различных ML-операций по кластеру систем.

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

Google TensorFlow

Как и Microsoft DMTK, Google TensorFlow — это фреймворк машинного обучения, созданный для распределения вычислений в рамках кластера. Наряду с Google Kubernetes этот фреймворк разрабатывался для решения внутренних проблем Google, но в конце концов компания выпустила его в открытое плавание в виде open source-продукта.

TensorFlow реализует графы потоков данных (data flow graphs), когда порции данных («тензоры») могут обрабатываться серией описанных графом алгоритмов. Перемещение данных по системе называется «потоками». Графы можно собираться с помощью С++ или Python, и обрабатывать процессором или видеокартой. У Google есть долгосрочные планы по развитию TensorFlow силами сторонних разработчиков.

Инструментарий для создания вычислительных сетей Microsoft (Microsoft Computational Network Toolkit)

По горячим следам DMTK Microsoft выпустила ещё один инструментарий для машинного обучения — CNTK.

CNTK аналогичен Google TensorFlow, он позволяет создавать нейронные сети посредством ориентированных графов. Microsoft сравнивает этот фреймворк с такими продуктами, как Caffe, Theano и Torch. Его главное преимущество — скорость, особенно когда речь идёт о параллельном использовании нескольких процессоров и видеокарт. Microsoft утверждает, что использование CNTK в сочетании с GPU-кластерами на базе Azure позволяет на порядок ускорить тренировку по распознаванию речи виртуальным помощником Cortana.

Изначально CNTK разрабатывался как часть исследовательской программы по распознаванию речи и предлагался в виде open source-проекта, но с тех пор компания перевыпустила его на GitHub под гораздо более либеральной лицензией.

Veles (Samsung)

Veles — это распределённая платформа для создания приложения глубокого обучения. Как и TensorFlow и DMTK, она написана на С++, хотя для автоматизации и координации узлов используется Python. Прежде чем скармливаться кластеру выборки данных, их можно анализировать и автоматически нормализовать. REST API позволяет немедленно использовать натренированные модели в рабочих проектах (если у вас достаточно мощное оборудование).

Использование Python в Veles выходит за пределы «склеивающего кода». Например, IPython (теперь Jupyter), инструмент для визуализации и анализа данных, может выводить данные из кластера Veles. Samsung надеется, что статус open source поможет стимулировать дальнейшее развитие продукта, как и портирование под Windows и Mac OS X.

Brainstorm

Проект Brainstorm разработан аспирантами из швейцарского института IDSIA (Institute Dalle Molle for Artificial Intelligence). Он создавался «для того, чтобы сделать нейронные сети глубокого обучения быстрее, гибче и интереснее». Уже есть поддержка различных рекуррентных нейронных сетей, например, LSTM.

В Brainstorm используется Python для реализации двух «обработчиков» — API управления данными: один для процессорных вычислений с помощью библиотеки Numpy, а второй для использования видеокарт с помощью CUDA. Большая часть работы выполняется в Python-скриптах, поэтому не ожидайте роскошного фронтенд-интерфейса, если только не прикрутите что-то своё. Но у авторов есть далеко идущие планы по «извлечению уроков из более ранних open source-проектов» и использованию «новых элементов дизайна, совместимых с различными платформами и вычислительными бэкендами».

mlpack 2

Многие проекты по машинному обучению используют mlpack, написанную на С++ библиотеку, созданную в 2011 году и предназначенную для «масштабирования, ускорения и упрощения использования». Внедрить mlpack для выполнения сделанных на скорую руку операций типа «чёрный ящик» можно с помощью кэша файлов, исполняемых через командную строку, а для более сложных работ — с помощью API C++.

В mlpack 2.0 был проведён большой объём работы по рефакторингу и внедрению новых алгоритмов, переработке, ускорению и избавлению от неэффективных старых алгоритмов. Например, для нативных функций генерирования случайных чисел C++11 была исключён генератор библиотеки Boost.

Одним из давних недостатков mlpack является нехватка биндингов для любых других языков, за исключением С++. Поэтому программисты, пишущие на этих других языках, не могут использовать mlpack, пока кто-то не выкатит соответствующую обёртку. Была добавлена поддержка MATLAB, но подобные проекты больше всего выигрывают в тех случаях, когда они напрямую полезны в основных окружениях, где и используется машинное обучение.

Marvin

Ещё один относительно свежий продукт. Marvin — это фреймворк для нейронных сетей, созданный в Princeton Vision Group. В его основе всего несколько файлов, написанных на С++, и CUDA-фреймворк. Несмотря на минимализм кода, Marvin поставляется с неплохим количеством предварительно натренированных моделей, которые можно использовать с надлежащим цитированием и внедрять с помощью pull request’ов, как и код самого проекта.

Neon

Компания Nervana создаёт программно-аппаратную платформу для глубокого обучения. И в качестве open source-проекта предлагает фреймворк Neon. С помощью подключаемых модулей он может выполнять тяжёлые вычисления на процессорах, видеокартах или оборудовании, созданном Nervana.

Neon написан на Python, с несколькими кусками на С++ и ассемблере. Так что если вы делаете научную работу на Python, или используете какой-то иной фреймворк, имеющий Python-биндинги, то можете сразу же использовать Neon.

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

habr.com

Машинное обучение — это легко / Хабр

В данной статье речь пойдёт о машинном обучении в целом и взаимодействии с датасетами. Если вы начинающий, не знаете с чего начать изучение и вам интересно узнать, что такое «датасет», а также зачем вообще нужен Machine Learning и почему в последнее время он набирает все большую популярность, прошу под кат. Мы будем использовать Python 3, так это как достаточно простой инструмент для изучения машинного обучения.

Для кого эта статья?

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

В цифрах

С каждым годом растёт потребность в изучении больших данных как для компаний, так и для активных энтузиастов. В таких крупных компаниях, как Яндекс или Google, всё чаще используются такие инструменты для изучения данных, как язык программирования R, или библиотеки для Python (в этой статье я привожу примеры, написанные под Python 3). Согласно Закону Мура (а на картинке — и он сам), количество транзисторов на интегральной схеме удваивается каждые 24 месяца. Это значит, что с каждым годом производительность наших компьютеров растёт, а значит и ранее недоступные границы познания снова «смещаются вправо» — открывается простор для изучения больших данных, с чем и связано в первую очередь создание «науки о больших данных», изучение которого в основном стало возможным благодаря применению ранее описанных алгоритмов машинного обучения, проверить которые стало возможным лишь спустя полвека. Кто знает, может быть уже через несколько лет мы сможем в абсолютной точности описывать различные формы движения жидкости, например.

Анализ данных — это просто?

Да. А так же интересно. Наряду с особенной важностью для всего человечества изучать большие данные стоит относительная простота в самостоятельном их изучении и применении полученного «ответа» (от энтузиаста к энтузиастам). Для решения задачи классификации сегодня имеется огромное количество ресурсов; опуская большинство из них, можно воспользоваться средствами библиотеки Scikit-learn (SKlearn). Создаём свою первую обучаемую машину:clf = RandomForestClassifier() clf.fit(X, y) Вот мы и создали простейшую машину, способную предсказывать (или классифицировать) значения аргументов по их признакам.

— Если все так просто, почему до сих пор не каждый предсказывает, например, цены на валюту?

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

Ближе к делу

— Получается, зарабатывать на этом деле я не сразу смогу?

Да, до решения задач за призы в $100 000 нам ещё далеко, но ведь все начинали с чего-то простого.

Итак, сегодня нам потребуются:

  • Python 3 (с установленной pip3)
  • Jupyter
  • SKlearn, NumPy и matplotlib
Если чего-то нет: ставим всё за 5 минутДля начала, скачиваем и устанавливаем Python 3 (при установке не забудьте поставить pip и добавить в PATH, если скачали установщик Windows). Затем, для удобства был взят и использован пакет Anaconda, включающий в себя более 150 библиотек для Python (ссылка на скачивание). Он удобен для использования Jupyter, библиотек numpy, scikit-learn, matplotlib, а так же упрощает установку всех. После установки, запускаем Jupyter Notebook через панель управления Anaconda, или через командную строку(терминал): «jupyter notebook». Дальнейшее использование требует от читателя некоторых знаний о синтаксисе Python и его возможностях (в конце статьи будут представлены ссылки на полезные ресурсы, среди них и «основы Python 3»).

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

import numpy as np from pandas import read_csv as read — Ладно, с Numpy всё понятно. Но зачем нам Pandas, да и еще read_csv?

Иногда бывает удобно «визуализировать» имеющиеся данные, тогда с ними становится проще работать. Тем более, большинство датасетов с популярного сервиса Kaggle собрано пользователями в формате CSV.

А вот так выглядит визуализированный pandas'ом датасет Здесь колонка Activity показывает, идёт реакция или нет (1 при положительном, 0 при отрицательном ответе). А остальные колонки — множества признаков и соответствующие им значения (различные процентные содержания веществ в реакции, их агрегатные состояния и пр.) — Помнится, ты использовал слово «датасет». Так что же это такое?

Датасет — выборка данных, обычно в формате «множество из множеств признаков» → «некоторые значения» (которыми могут быть, например, цены на жильё, или порядковый номер множества некоторых классов), где X — множество признаков, а y — те самые некоторые значения. Определять, например, правильные индексы для множества классов — задача классификации, а искать целевые значения (такие как цена, или расстояния до объектов) — задача ранжирования. Подробнее о видах машинного обучения можно прочесть в статьях и публикациях, ссылки на которые, как и обещал, будут в конце статьи.

Знакомимся с данными

Предложенный датасет можно скачать здесь. Ссылка на исходные данные и описание признаков будет в конце статьи. По представленным параметрам нам предлагается определять, к какому сорту относится то или иное вино. Теперь мы можем разобраться, что же там происходит:path = "%путь к файлу%/wine.csv" data = read(path, delimiter=",") data.head() Работая в Jupyter notebook, получаем такой ответ: Это значит, что теперь нам доступны данные для анализа. В первом столбце значения Grade показывают, к какому сорту относится вино, а остальные столбцы — признаки, по которым их можно различать. Попробуйте ввести вместо data.head() просто data — теперь для просмотра вам доступна не только «верхняя часть» датасета.

Простая реализация задачи на классификацию

Переходим к основной части статьи — решаем задачу классификации. Всё по порядку:
  • создаём обучающую выборку
  • пробуем обучить машину на случайно подобранных параметрах и классах им соответствующих
  • подсчитываем качество реализованной машины
Посмотрим на реализацию (каждая выдержка из кода — отдельный Cell в notebook):X = data.values[::, 1:14] y = data.values[::, 0:1] from sklearn.cross_validation import train_test_split as train X_train, X_test, y_train, y_test = train(X, y, test_size=0.6) from sklearn.ensemble import RandomForestClassifier clf = RandomForestClassifier(n_estimators=100, n_jobs=-1) clf.fit(X_train, y_train) clf.score(X_test, y_test) Создаем массивы, где X — признаки (с 1 по 13 колонки), y — классы (0ая колонка). Затем, чтобы собрать тестовую и обучающую выборку из исходных данных, воспользуемся удобной функцией кросс-валидации train_test_split, реализованной в scikit-learn. С готовыми выборками работаем дальше — импортируем RandomForestClassifier из ensemble в sklearn. Этот класс содержит в себе все необходимые для обучения и тестирования машины методы и функции. Присваиваем переменной clf (classifier) класс RandomForestClassifier, затем вызовом функции fit() обучаем машину из класса clf, где X_train — признаки категорий y_train. Теперь можно использовать встроенную в класс метрику score, чтобы определить точность предсказанных для X_test категорий по истинным значениям этих категорий y_test. При использовании данной метрики выводится значение точности от 0 до 1, где 1 100% Готово!Про RandomForestClassifier и метод кросс-валидации train_test_split

При инициализации clf для RandomForestClassifier мы выставляли значения n_estimators=100, n_jobs = -1, где первый отвечает за количество деревьев в лесу, а второй — за количество участвующих в работе ядер процессора (при -1 задействованы все ядра, по умолчанию стоит 1). Так как мы работаем с данным датасетом и нам негде взять тестирующую выборку, используем train_test_split для «умного» разбиения данных на обучающую выборку и тестирующую. Подробнее про них можно узнать, выделив интересующий Вас класс или метод и нажав Shift+Tab в среде Jupyter.

— Неплохая точность. Всегда ли так получается?

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

— Слишком легко. Больше мяса!

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

Да, с уменьшением количества признаков, падает и точность распознавания. И график получился не особенно-то красивым, но это и не решающее в простом анализе: вполне наглядно видно, как машина выделила обучающую выборку (точки) и сравнила её с предсказанными (заливка) значениями.Реализация здесьfrom sklearn.preprocessing import scale X_train_draw = scale(X_train[::, 0:2]) X_test_draw = scale(X_test[::, 0:2]) clf = RandomForestClassifier(n_estimators=100, n_jobs=-1) clf.fit(X_train_draw, y_train) x_min, x_max = X_train_draw[:, 0].min() - 1, X_train_draw[:, 0].max() + 1 y_min, y_max = X_train_draw[:, 1].min() - 1, X_train_draw[:, 1].max() + 1 h = 0.02 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) pred = clf.predict(np.c_[xx.ravel(), yy.ravel()]) pred = pred.reshape(xx.shape) import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF']) cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF']) plt.figure() plt.pcolormesh(xx, yy, pred, cmap=cmap_light) plt.scatter(X_train_draw[:, 0], X_train_draw[:, 1], c=y_train, cmap=cmap_bold) plt.xlim(xx.min(), xx.max()) plt.ylim(yy.min(), yy.max()) plt.title("Score: %.0f percents" % (clf.score(X_test_draw, y_test) * 100)) plt.show() Предлагаю читателю самостоятельно узнать почему и как он работает.

Последнее слово

Надеюсь, данная статья помогла хоть чуть-чуть освоиться Вам в разработке простого машинного обучения на Python. Этих знаний будет достаточно, чтобы продолжить интенсивный курс по дальнейшему изучению BigData+Machine Learning. Главное, переходить от простого к углубленному постепенно. А вот полезные ресурсы и статьи, как и обещал:

Материалы, вдохновившие автора на создание данной статьи

Исторические очерки: Подробнее про машинное обучение: Изучаем python, или до работы с данными: Однако для наилучшего освоения библиотеки sklearn пригодится знание английского: в этом источнике собраны все необходимые знания (так как это API reference).

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

Где брать данные, или «хранилище датасетов» — здесь собрано огромное количество данных от самых разных источников. Очень полезно тренироваться на реальных данных.

Буду признателен за поддержку по улучшению данной статьи, а так же готов к любому виду конструктивной критики.

habr.com

Microsoft разработала аппаратную платформу для машинного обучения

Чип Intel Stratix 10, на котором базируется платформа

Microsoft Research Blog

Microsoft разработала платформу для аппаратного ускорения машинного обучения. Она может работать не только с собственным фреймворком Microsoft, но и с аналогичным программным обеспечением от Google и других разработчиков. В основе платформы лежит FPGA-чип, который можно перепрограммировать после производства. Компания заявляет, что при использовании чипа Stratix 10 от Intel производительность системы составляет 39,5 терафлопс, а отклик не превышает одной миллисекунды. Microsoft предлагает использовать платформу в первую очередь для задач, требующих мгновенной обработки данных, таких как трансляция потокового видео. Разработка была представлена на конференции Hot Chips, также об этом сообщается в блоге компании.

Из-за того, что машинное обучение используется все чаще в разных сферах, некоторые крупные компании начинают разрабатывать и использовать специализированные чипы, оптимизированные для выполнения именно такого типа задач. К примеру, в мае компания Google сообщила, что разработала специализированный процессор для машинного обучения под названием Tensor Processing Unit, который она планирует использовать при создании собственных суперкомпьютеров для машинного обучения.

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

Плата, разработанная в Microsoft

Microsoft Research Blog

Разработчики отдельно отмечают, что их система уже поддерживает сторонний фреймворк — Google TensorFlow, а в будущем планируется поддержка многих других программных платформ. Microsoft планирует предоставлять доступ к платформе для пользователей облачного сервиса Azure, а также использовать ее в других своих сервисах, таких как поиск Bing.

Существуют и другие специализированные аппаратные платформы для машинного обучения. В начале года NVIDIA представила свой компьютер Xavier, предназначенный для беспилотных автомобилей, а компания Movidius разработала нейросетевую «флешку».

Григорий Копиев

Обновлено:После публикации новости читатели N+1 указали, что ранее другой крупный производитель FPGA-чипов Xilinx представил в целом похожую платформу reVISION, ориентированную в первую очередь на компьютерное зрение. Она поддерживает сторонние фреймворки, и в том числе также планируется поддержка Google TensorFlow.

nplus1.ru

Приложения с GPU-ускорением в области машинного обучения

Машинное обучение

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

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

К числу тех, кто впервые применил графические ускорители для решения задач машинного обучения, относятся многие крупные веб-компании и социальные сетевые серверы, наряду с научно-исследовательскими институтами высокого ранга в области обработки и анализа данных и машинного обучения. Благодаря тысячам вычислительных ядер и увеличению производительности приложений в 10-100 раз по сравнению с CPU, GPU стали процессорами, которые выбирают специалисты по обработке данных для работы с данными большого объема.

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

 

- Профессор Иэн Лейн (Ian Lane), Университет Карнеги-Меллон

 

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

 

 

  • Caffe: Framework for convolutional neural network algorithms
  • cuda-convnet: High performance C++/CUDA implementation of convolutional neural networks
  • Theano: Python library to define, optimize, and evaluate mathematical expressions
  • Torch7: Scientific computing framework for machine learning algorithms 
  • cuBLAS: GPU-accelerated version of the complete standard BLAS library
  • MATLAB: Easy-to-use HPC language integrating computation, visualization, and programming
  • cxxnet: Neural network toolkit

 

 

 

  • Video: Visual Object Recognition Using Deep Convolutional Neural Networks (Rob Fergus, Facebook/NYU)
  • Video: 10 Billion Parameter Neural Networks in Your Basement (Adam Coates, Stanford University)
  • Video: Deep Neural Networks for Visual Pattern Recognition (Dan Ciresan, IDSIA)
  • Video: GPU Accelerated Model Combination for Robust Speech Recognition and Keyword Search(Wonkyum Lee, Carnegie Mellon University)
  • Video: Clarifai: Enabling Next Generation Intelligent Applications (Matthew Zeiler, Clarifai)
  • Video: Beyond Pedestrian Detection: Deep Neural Networks Level-Up Automotive Savety(Ikuro Sato, Hideki Niihara, Denso IT Laboratory)
  • Video: Using GPUs to Accelerate Learning to Rank (Alexander Shcekalev, Yandex)
  • Video: Extreme Matching Learning w/ GPUs (John Canny, UC Berkeley)
  • Video: GPU-Optimized Deep Learning Networks for Automatic Speech Recognition (Jessica Ray, MIT Lincoln Laboratory)
  • See more big data talks on GTC On-Demand.

 

  • Whitepaper: Deep Learning with COTS HPC Systems(Adam Coates, Stanford)
  • Whitepaper: ImageNet Classification with Deep Convolutional Neural Networks (Alex Krizhevsky, Ilya Sutskever, Geoffrey Hinton, University of Toronto)
  • Whitepaper: Multi-GPU Training of ConVets (Omry Yadan, Keith Adams Yaniv Taigman, Marc Ranzato, Facebook)
  • Whitepaper: OverFeat Recognition Localication Detection (Pierre Sermanet, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, Yann LeCun, New York University)
  • Whitepaper: Mitosis Detection in Breast Cancer Histology Images using Deep Neural Networks (Dan Ciresan,IDSIA)
  • Whitepaper: Fast Support Vector Machine Training and Classification on GPU Processors (Bryan Catanzaro, NVIDIA)
  • Competition winning papers and benchmarks

 

 

2 графических ускорителя NVIDIA Tesla K40

2 процессора Intel Xeon (8 ядер или больше)

64 ГБ системной памяти

8 графических ускорителей NVIDIA Tesla K40

2 процессора Intel Xeon (8 ядер или больше)

256 ГБ системной памяти

 

Опции конфигурации

 

Чтобы найти информацию, как приобрести графические ускорители, зайдите на страницу Где купить Tesla.

 

 

www.nvidia.ru

подборка видеокурсов по Computer Science / Блог компании Edison / Хабр

MagisterLudi 22 ноября 2016 в 16:32 https://github.com/Developer-Y/cs-video-courses

Содержание

  1. Введение в Computer Science
  2. Структуры данных и Алгоритмы
  3. Системное программирование
  4. Распределенные системы
  5. Базы данных
  6. Объектно-ориентированный дизайн и разработка софта
  7. Искусственный интеллект
  8. Машинное обучение
  9. Веб-разработка и интернет-технологии
  10. Concurrency
  11. Компьютерные сети
  12. Разработка мобильных приложений
  13. Математика для программистов
  14. Теория информатики и языки программирования
  15. Архитектура компьютера
  16. Безопасность
  17. Компьютерная графика
  18. Работа с изображениями и компьютерное зрение
  19. Интерфейс Человек-Компьютер
  20. Вычислительная биология
  21. Прочее
Поддержка публикации — компания Edison, которая тестирует критические системы на отказоустойчивость, а так же проектирует и разрабатывает ПО для кластерных вычислений.

Введение в Computer Science

  • 6.00SC — Introduction to Computer Science and Programming (весна 2011) — MIT OCW
  • 6.00 — Introduction to Computer Science and Programming (осень 2008) — MIT OCW
  • 6.01SC — Introduction to Electrical Engineering and Computer Science I — MIT OCW
  • 6.001 — Structure and Interpretation of Computer Programs, MIT (Textbook)
  • CS 10 The Beauty & Joy of Computing, весна 2015 — UCBerkeley
  • CS 50 — Introduction to Computer Science, Harvard University (cs50.tv)
  • CS 61A — Structure and Interpretation of Computer Programs [Python], UC Berkeley
  • SPD1 — Systematic Program Design [Racket], University of British Columbia
  • CS 101 — Computer Science 101, Stanford University (Register free to access Videos)
  • CS E-1 Understanding Computers and the Internet, Spring 2013 — Harvard Extension School (Весна 2011)
  • CSE 142 Computer Programming I (C Programming), Autumn 200 — University of Washington
  • CS1301 Intro to computing — Gatech
  • CS 106A — Programming Methodology, Stanford University
  • CS 106B — Programming Abstractions, Stanford University
  • CS 107 — Programming Paradigms, Stanford University

Структуры данных и Алгоритмы

  • CS 61B — Data Structures, UC Berkeley
  • MOOC — Design and Analysis of Algorithms Part 1 — Prof Roughgarden — Coursera (Part 2)
  • MOOC — Algorithms Part 1 — Prof Sedgewick (Part 2)
  • COP 3530 Data Structures and Algorithms, Prof Sahni, UFL (Videos)
  • CS2: Data Structures and Algorithms — Richard Buckland — UNSW
  • 6.006 — Introduction to Algorithms, MIT OCW
  • CS 161 — Design and Analysis of Algorithms, Prof. Tim Roughgarden, Stanford University
  • CSE 373 — Analysis of Algorithms, Stony Brook — Prof Skiena
  • CS16 Introduction to Algorithms and Data Structures — Brown University
  • 6.046J — Introduction to Algorithms — Fall 2005, MIT OCW
  • 6.046 — Design and Analysis of Algorithms, Весна 2015 — MIT OCW
  • CS 473: Algorithms — University of Illinois at Urbana-Champaign
  • Programming Challenges — Prof Skiena
  • 16s-4102 — Algorithms, University of Virginia (Youtube)
  • CS 170 Algorithms — Весна 2015 — UCBerkeley
  • COP 5536 Advanced Data Structures, Prof Sahni — UFL (Videos)
  • CS 261 — A Second Course in Algorithms, Stanford University (Lectures) (Youtube)
  • CS 224 — Advanced Algorithms, Harvard University (Lecture Videos) (Youtube)
  • ECS 122A — Algorithm Design and Analysis, UC Davis
  • CSEP 521: Applied Algorithms, Winter 2013 — University of Washington (Videos)
  • CS 6150 — Advanced Algorithms (Fall 2016), University of Utah
  • ECS 222A — Graduate Level Algorithm Design and Analysis, UC Davis
  • 6.851 — Advanced Data Structures, MIT (MIT OCW)
  • 6.854 — Advanced Algorithms, MIT (Prof. Karger lectures)
  • CS264 Beyond Worst-Case Analysis, Fall 2014 — Tim Roughgarden Lecture (Youtube)
  • CS364A Algorithmic Game Theory, Fall 2013 — Tim Roughgarden Lectures
  • CS364B Advanced Mechanism Design, Winter 2014 — Tim Roughgarden Lectures
  • Algorithms — Aduni
  • Advanced Topics in Algorithms and Datastructures — SS 2005 — Universität Freiburg
  • Algorithmentheorie/Algorithms Theory — WS 2013 — Universität Freiburg (WS 2011)
  • Theory I — SS 2010 — Universität Freiburg
  • CS225 — Data Structures — University of Illinois at Urbana-Champaign

Системное программирование

Распределенные системы

Базы данных

  • CS121 — Introduction to Relational Database Systems, Fall 2016 — Caltech
  • CS122 — Relational Database System Implementation, Winter 2014-2015 — Caltech
  • CS 5530 — Database Systems, Весна 2016, University of Utah
  • MOOC — Database Stanford Dbclass
  • CSEP 544, Database Management Systems, Au 2015 — University of Washington
  • CMPSC 431W Database Management Systems, Fall 2015 — PSU
  • Principles of Database Management, Bart Baesens
  • 15-721 — Database Systems, CMU (Lectures — YouTube)
  • CS 186 — Database Systems, UC Berkeley, Весна 2015 (Lectures- YouTube)
  • CS 6530 — Graduate-level Database Systems, Fall 2016, University of Utah (Lectures — YouTube)
  • 6.830/6.814: Database Systems [Fall 2014]
  • FIT9003 Database Systems Design, Rob Meredith, Monash University

Объектно-ориентированный дизайн и разработка софта

Искусственный интеллект

Машинное обучение

Introduction to Machine Learning
  • MOOC Machine Learning Andrew Ng — Coursera/Stanford (Notes)
  • MOOC — Statistical Learning, Stanford University
  • CS 156 — Learning from Data, Caltech
  • 10-601 — Introduction to Machine Learning (MS), Carnegie Mellon University
  • 10-701 — Introduction to Machine Learning (PhD) — Tom Mitchell, Spring 2011, Carnegie Mellon University (Fall 2014)
  • Microsoft Research — Machine Learning Course
  • CS 446 — Machine Learning, Fall 2016, UIUC(Fall 2015 Lectures)
  • undergraduate machine learning at UBC 2012, Nando de Freitas
  • CS 229 — Machine Learning — Stanford University
  • CS 189/289A Introduction to Machine Learning, Prof Jonathan Shewchuk — UCBerkeley
  • CS 5350/6350 — Machine Learning, Fall 2016, University of Utah
  • ECE 5984 Introduction to Machine Learning, Spring 2015 — Virginia Tech
  • STA 4273H (Winter 2015): Large Scale Machine Learning
  • CS 485/685 Machine Learning, Shai Ben-David, University of Waterloo
  • Machine Learning and Data Mining — WS 2004 — Universität Freiburg
Data Mining
Probabilistic Graphical Modeling
Deep Learning
Advanced Machine Learning
Natural Language Processing and Computer Vision
Misc Machine Learning Topics

Concurrency

Компьютерные сети

Разработка мобильных приложений

Математика для программистов

  • 6.042J — Mathematics for Computer Science, Fall 2010, MIT OCW
  • 6.042J — Mathematics for Computer Science, Весна 15, MIT OCW
  • Computer Science 70, 001 — Fall 2012
  • 6.041 Probabilistic Systems Analysis and Applied Probability — MIT OCW
  • 10-600 Math Background for ML — CMU
  • Linear Algebra Review — CMU
  • Statistics 110: Probability
  • 18.06 — Linear Algebra, Prof. Gilbert Strang, MIT OCW
  • 36-705 — Intermediate Statistics — Larry Wasserman, CMU
  • STATS 250 — Introduction to Statistics and Data Analysis, UMichigan
  • 131B — Introduction to Probability and Statistics, UCI
  • Multiple View Geometry — Lecture 1 (Prof. Daniel Cremers) TUM
  • The Probability and Statistics Full Course — YouTube
  • A first course in Linear Algebra — N J Wildberger — UNSW

Веб-разработка и интернет-технологии

Теория информатики и языки программирования

  • MOOC — Compilers — Stanford University
  • CS 164 Hack your language, UC Berkeley (Lectures — Youtube)
  • CS 173 Programming Languages, Brown University (Book)
  • CS 421 — Programming Languages and Compilers, UIUC (Videos)
  • CSC 253 — CPython internals: A ten-hour codewalk through the Python interpreter source code, University of Rochester
  • CSEP 501 — Compiler Construction, University of Washington (Lectures — Youtube)
  • CSEP 505 Programming Languages, Winter 2015 — University of Washington
  • DMFP — Discrete Mathematics and Functional Programming, Wheaton College
  • CS 374 — Algorithms & Models of Computation (Fall 2014), UIUC (Lecture videos)
  • 6.045 Automata, Computability, and Complexity, MIT (Lecture Videos)
  • CS581 Theory of Computation — Portland State University (Lectures — Youtube)
  • Theory of Computation — Fall 2011 UC Davis
  • TDA555 Introduction to Functional Programming — Chalmers University of Technology (Lectures — YouTube)
  • Philip Wadler Haskell lecture recordings
  • Functional Programming — University of Edinburgh — 2016-17
  • MOOC — Functional Programming Principles in Scala by Martin Odersky (YouTube)

Архитектура компьютера

  • How Computers Work — Aduni
  • 6.004 — Computation Structures Весна 2013, MIT
  • CS 61C — Machine Structures, UC Berkeley (Lectures — YouTube)
  • CS1: Higher Computing — Richard Buckland UNSW
  • 18-447 — Introduction to Computer Architecture, CMU (Lectures — YouTube — Fall 15)
  • CS 152 Computer Architecture and Engineering, UC Berkeley
  • CSEP 548 — Computer Architecture Autumn 2012 — University of Washington
  • 15-418 — Parallel Computer Architecture and Programming, CMU (Lecture Videos)
  • EE445L Embedded Systems Design Lab, Fall 2015, UTexas
  • CS149 Embedded Systems — Fall 2014 — UCBerkeley
  • ECE 4760 Designing with Microcontrollers Fall 2016, Cornell University (Lectures — Youtube)
  • CS 267 Applications of Parallel Computers, Весна 16 — UC Berkeley (YouTube)
  • CMPE 118/L(218/L) — Mechatronics — Fall 2015
  • Software Engineering for Embedded Systems — WS 2010/11 — iTunes — HPI
  • ELEC2141 Digital Circuit Design, UNSW

Безопасность

Компьютерная графика

Обработка изображений и компьютерное зрение

Интерфейс Человек-Компьютер

Вычислительная биология

Прочее

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Метки: Добавить метки

habr.com


Читайте также
  • Гиперскоростная звезда – более 1.000.000 миль в час
    Гиперскоростная звезда – более 1.000.000 миль в час
  • Астрономы обнаружили самую большую спиральную галактику
    Астрономы обнаружили самую большую спиральную галактику
  • Млечный путь содержит десятки миллиардов планет, схожих с Землей
    Млечный путь содержит десятки миллиардов планет, схожих с Землей
  • Млечный путь разорвал своего спутника на четыре отдельных хвоста
    Млечный путь разорвал своего спутника на четыре отдельных хвоста
  • Найден источник водородных газов для нашей Галактики
    Найден источник водородных газов для нашей Галактики