Нейронное программирование: Нейронные сети — всё по этой теме для программистов

Нейронные сети — всё по этой теме для программистов

Кейс: Хабиб vs МакГрегор или Распознавание лиц на Python

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

Тест: что реально, а что создала нейросеть?

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

Чего ждать в сфере ИИ и машинного обучения в 2021 году?

Нейросети становится умнее с каждым годом. Рассказываем о том, чего ждать в сфере ИИ и машинного обучения в 2021 году

hent-AI: нейросеть, которая убирает цензуру из аниме

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

Как работает нейронная сеть — простое объяснение на цветочках

В этом видео автор на простом примере объясняет принципы работы линейного слоя нейронной сети и базовые термины.

Правильный NLP: как работают и что умеют системы обработки естественного языка

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

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

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

Какие из этих нейросетей мы выдумали? Тест-угадайка от Tproger и ABBYY

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

Что такое нейронная сеть и как она работает — основы простым языком

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

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

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

Искусственный интеллект: основные задачи и методы на примерах из жизни

В данном материале на примерах их жизни описаны несколько методологий и задач искусственного интеллекта: от нейронок до экспертных систем

GPU — это не только про игры: четыре примера с NVIDIA GTC 2019

По итогам NVIDIA GTC 2019 собрали для вас четыре современных примера применения GPU: технологические тренды, за которые стоит зацепиться айтишникам.

Кто это нарисовал — нейросеть или художник? Тест-угадайка от Tproger и «Системный Блокъ»

Сможет ли робот превратить кусок холста в произведение искусства? А если это нейросеть, обученная на великих картинах? Почувствуйте всю силу современных технологий в тесте «Нейросеть или художник», который мы сделали…

«Умная» колонка, наушники с технологией открытого звука и мультиподписка на сервисы: итоги конференции YaC 2018

Приглашенные спикеры рассказали об использовании цифровых технологий в сферах торговли, маркетинга и информационных технологий.

Инструменты для работы с интернетом вещей и звонки в смешанной реальности: обзор конференции Microsoft Build 2018

7 мая 2018 года началась ежегодная конференция для разработчиков Microsoft Build 2018. Компания рассказала о наступлении эры «умных» устройств и представила новые продукты.

Как работает беспилотный транспорт

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

Пишем нейросеть на Go с нуля

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

Курс «Нейронные сети»

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

Курс «Введение в компьютерное зрение»

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

Обучение автопилота на Python в Grand Theft Auto V

Достаточно известный среди любителей языка Python разработчик по имени Гаррисон «Sentdex» Кинсли выпустил очередной курс, «Python Plays GTA V».

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

В статье подробно описывается пример создания нейронной сети для классификации текста при помощи TensorFlow. Материал понятен даже без спецподготовки.

Нейронная сеть помогает писать код для нейронных сетей: обзор инструмента Neural Complete

На GitHub появился интерфейс для автозаполнения Neural Complete. Это нейронная сеть, которая помогает писать код для создания нейронных сетей.

Машинное обучение и нейронные сети на PHP: библиотека PHP-ML

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

Подборка материалов для изучения машинного обучения

Машинное обучение сейчас является одной из самых востребованных областей в программировании. И действительно — человек издавна мечтал создать ИИ, и сейчас эта мечта близка как никогда. Алгоритмы машинного обучения могут…

Разнообразие нейронных сетей. Часть вторая. Продвинутые конфигурации

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

Шпаргалка по разновидностям нейронных сетей. Часть первая. Элементарные конфигурации

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

10 полезных книг по машинному обучению

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

Первые шаги искусственного интеллекта

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

Изучаем нейронные сети за четыре шага

Рассказывает Per Harald Borgen  В этот раз я решил изучить нейронные сети. Базовые навыки в этом вопросе я смог получить за лето и осень 2015 года. Под базовыми навыками я…

Линус «Москвич» Торвальдс: какие автомобили распознает нейронная сеть в известных программистах

Месяц назад популярный сайт «Авто.ру» обновил свои приложения для смартфонов, добавив функцию распознавания автомобиля по его фотографии. Алгоритм основан на нейронных сетях, обучение проводилось на большой выборке — почти 6 миллионов фотографий…

9 новых технологий, которые вы можете освоить за лето и стать ценнее на рынке труда

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

Изучаем нейронные сети: с чего начать

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

Открытое образование — Программирование глубоких нейронных сетей на Python

  • Russian
  • 16 weeks
  • от 8 до 9 часов в неделю
  • 3 credit points

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

About

В курсе «Программирование глубоких нейронных сетей на Python» рассматривается применение нейросетей для решения прикладных задач компьютерного зрения и анализа текстов. 
Вы узнаете, как устроена модель искусственного нейрона и нейронной сети, а также как обучать нейронную сеть решать задачи анализа данных. Будут рассмотрены популярные в настоящее время архитектуры нейронных сетей: сверточные, сети долго-краткосрочной памяти (LSTM) и управляемые рекуррентные блоки (GRU).
Отличительная особенность курса – практическая направленность. Курс включает как изучение теоретических материалов, так и большое количество практических заданий на разработку программ обучения нейронных сетей. Программы мы будем писать на Python с использованием готовых библиотек TensorFlow и Keras. Вы обучите нейронные сети для распознавания моделей одежды, классификации объектов на изображениях, анализа тональности текстов, автоматической генерация текста. Вы научитесь использовать бесплатную облачную платформу Google Colaboratory для обучения нейронных сетей.

Format

Видео-лекции, скринкасты, тестовые, интерактивные и проектные задания

Requirements

Умение программировать на любом высокоуровневом языке, желательно Python.

Базовые знания высшей математики: производные, операции с матрицами и векторами

Course program

Раздел 1. Основы программирования нейронных сетей
Тема 1.1.  Введение в тематику искусственных нейронных сетей
Тема 1.2. Модель искусственного нейрона.  Общее представление об искусственной нейронной сети
Тема 1.3. Библиотеки для обучения  нейронных сетей
Тема 1.4. Распознавание предметов одежды. Обзор набора данных и выбор архитектуры нейронной сети
Тема 1.5. Распознавание предметов одежды. Построение архитектуры нейронной сети и ее обучение
Тема 1.6. Анализ качества обучения нейронной сети

Раздел 2. Обучение искусственной нейронной сети
Тема 2.1. Обучение искусственного нейрона
Тема 2.2. Обучение искусственной нейронной сети. Метод обратного распространения ошибки

Раздел 3. Нейронные сети для анализа табличных данных
Тема 3.1. Применение нейронных сетей для решения задачи регрессии

Раздел 4. Нейронные сети для задачи анализа изображений
Тема 4.1. Сверточные нейронные сети
Тема 4.2. Распознавание объектов на изображении
Тема 4.3. Предварительно обученные нейронные сети
Тема 4.4. Перенос обучения в нейронных сетях

Раздел 5. Нейронные сети для задачи анализа естественного языка
Тема 5.1. Нейронные сети для задач обработки естественного языка
Тема 5.2. Одномерные сверточные нейронные сети
Тема 5.3. Рекуррентные нейронные сети для задач обработки естественного языка

Education results

В результате освоения курса обучаемый будет способен:
1. Разрабатывать программы обучения глубоких нейронных сетей на Python с помощью библиотек TensorFlow и Keras.
2. Использовать открытую облачную платформу Google Colaboratory для обучения глубоких нейронных сетей.
3. Применять нейронные сети для классификации изображений.
4. Применять нейронные сети для классификации текстов.
5. Применять нейронные сети для решения задачи регрессии для табличных данных.
6. Использовать предварительно обученные нейронные сети.

Formed competencies

1) Способность разрабатывать программы обучения глубоких нейронных сетей
2) Способность выбирать архитектуру нейронной сети для заданной задачи

ГЛУБОКИЕ ИСКУССТВЕННЫЕ НЕЙРОННЫЕ СЕТИ ДЛЯ ПРОГНОЗА ЗНАЧЕНИЙ ДЕБИТОВ ДОБЫВАЮЩИХ СКВАЖИН

Актуальность исследования обусловлена необходимостью поддержки принятия решения специалистами добывающих предприятий нефтегазовой отрасли при управлении производством. Точное прогнозирование значений дебитов добывающих скважин позволяет определить такие технологические режимы работы фонда скважин и технологического оборудования, которые позволят достичь заданного объёма выпуска продукции. Существующие методы не всегда обеспечивают требуемый уровень точности при прогнозе значений дебитов скважин, что приводит к ошибкам при расчёте экономического эффекта при оценке рентабельности добывающих скважин и последующих поставок углеводородного сырья, а также при учёте ограничений, накладываемых органами надзора за пользованием недрами. Цель: разработать и предложить наиболее эффективные модели глубоких искусственных нейронных сетей при прогнозе значений компонентов добычи углеводородного сырья – нефти, газа, жидкости (газового конденсата) и воды. Объекты: технологические параметры дебитов добывающих скважин фонда нефтяных, газовых, нефтегазовых и нефтегазоконденсатных месторождений. Методы: методы анализа больших объёмов технологических данных скважин, развиваемые в соответствии с концепцией «Big Data»; модели глубоких искусственных нейронных сетей; объектно-ориентированное программирование; методы оценки и статистического анализа результатов исследований эффективности глубоких искусственных нейронных сетей при прогнозе значений дебитов добывающих скважин. Результаты. Разработана методика подготовки данных по дебитам скважин для обучения и тестирования глубоких искусственных нейронных сетей прямого распространения. Проведены исследования различных архитектур таких нейросетей при решении задач прогноза дебитов нефти, газа, жидкости (газового конденсата) и дебита воды. Выявлены наиболее эффективные архитектуры глубоких нейросетей прямого распространения. Такие нейронные сети позволяют увеличить точность прогноза в два и более раза по сравнению с точностью прогноза, даваемой традиционным методом экстраполяции по скользящей средней.

Моя первая нейронная сеть

Содержание курса

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

Структура программы
I. Теоретический модуль
1. Основные понятие нейронных сетей
1.1 Математическая логика событий нейронных сетей. Основы нейросетевых технологий.
1.2. Построение современной нейросетевой технологии. Трассировка нейронной сети.
1.3.Стратегии обучения и самообучения. Нейронные сети с обратными связями.
1.4. Нейросетевые самообучающиеся системы управления Логическое программирование нейронной сети.
2. Построение системы принятия решений на основе логической нейронной сети.
2.1. Структура логической нейронной сети.
2.2.Корректировка параметров, дистрибутивные преобразования, однослойные и совершенные логические нейронные сети.
2.3. Трассировка логической структуры нейросети.
2.4. Методика построения системы принятия решений на основе логической нейронной сети
3. Нейросетевые технологии в экономике и бизнесе.
3.1. Нейросетевые модели пошаговой оптимизации, маршрутизации и тактических игр
3.2. Основы живого моделирования.
3.3. Перспективные нейросетевые технологии

II. Практический модуль
1. Создание нейронной сети, выполняющей логическую функцию «И» (4 часа)
2. Получение начальных навыков обучения простейшей нейронной сети (4 часа)
3. Построение и обучение нейронной сети для решения задачи по распознанию цифр (4 часа)
4. Синтез нейронной сети для решения систем обыкновенных дифференциальных уравнений (4 часа)

Обучение заканчивается выпускной квалификационной работой.

Используемое оборудование: 

  • персональные компьютеры, мультимедийный проектор, экран, доска;
  • компьютерные технологии обучения, включая элементы дистанционного обучения;
  • программные продукты: операционная система GNU/Linux или Microsoft Windows, офисный пакет OpenOffice.org/LibreOffice, браузер Mozilla Firefox или Iceweasel, система численного моделирования MatLab 8.0 или старше
Программа ориентирована на школьников старших классов, непрофильных специалистов, бизнесменов

Программирование и искусственный интеллект

 

Учебный процесс ведется по углубленной программе. Большинство практических дисциплин преподают ведущие специалисты компаний-разработчиков программного обеспечения (Яндекс, Mail.ru Group, JetBrains, DevExperts и др.). К чтению курсов привлекаются лучшие преподаватели вузов Санкт-Петербурга.

Среди студентов большое число победителей всероссийских и международных олимпиад по математике, информатике и программированию. Выпускников высоко оценивают российские и зарубежные компании. Студенты и аспиранты, которые принимают участие в научных исследованиях, получают специальные стипендии и выигрывают гранты. Их научные статьи публикуются в зарубежных изданиях, индексируемые Web of Science и Scopus.

Программа ориентирована на наиболее способных студентов, что позволяет вести обучение на глубоком теоретическом и практическом уровне. Фундаментальные знания в области теоретической информатики (computer science), непрерывной и дискретной математики преподаются известными специалистами в соответствующих дисциплинах. В практической части уделяется внимание разработке программного обеспечения и современным информационным технологиям. Занятия этой части проводятся представителями индустрии.
В образовательной программе выделены две специализации:

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

Выпускники ОП «Программирование и искусственный интеллект» являются востребованными специалистами не только в Санкт-Петербурге и России, но и за рубежом. Студенты имеют возможность участвовать в исследованиях, проводимых в рамках международной научной лаборатории «Компьютерные технологии» и проходить практику в ведущих компаниях-разработчиках программного обеспечения, таких как Яндекс, JetBrains, Mail.ru Group, Одноклассники, Wärtsilä. Знания и опыт, полученные в результате обучения, позволяют выпускникам становиться ведущими исследователями в таких областях, как программная инженерия, машинное обучение и бионформатика. Многие выпускники становятся ведущими специалистами и руководителями в области разработки программного обеспечения, в том числе, открывают собственные стартапы.

 

Программирование нейронных сетей на языке PYTHON. № УД-4414/уч.


Please use this identifier to cite or link to this item: https://elib.bsu.by/handle/123456789/185037

Title: Программирование нейронных сетей на языке PYTHON. № УД-4414/уч.
Other Titles: Учебная программа учреждения высшего образования по учебной дисциплине для специальности: 1-31 03 04 Информатика 1-31 03 07-01 Прикладная информатика (программное обеспечение компьютерных систем)
Authors: Казачёнок, В. В.
Keywords: ЭБ БГУ::ЕСТЕСТВЕННЫЕ И ТОЧНЫЕ НАУКИ::Кибернетика
ЭБ БГУ::ОБЩЕСТВЕННЫЕ НАУКИ::Информатика
Issue Date: 2017
Publisher: БГУ, ФПМИ, Кафедра компьютерных технологий и систем
Abstract: Курс «Программирование нейронных сетей на языке Python» входит в разряд специальных курсов, читаемых студентам специальностей «Информатика» и «Прикладная информатика». Он основывается на знаниях, полученных в рамках изучения курсов «Математический анализ» и «Геометрия и алгебра». Дисциплина «Программирование нейронных сетей на языке Python» знакомит студентов с прикладными задачами использования нейронных сетей в задачах классификации, принятия решений, распознавания образов, прогнозирования. При этом рассматривается препроцессинг данных, исследуется глубокое обучение нейронной сети, анализируется качество обучения на основе использования стандартных библиотек Python. Проводится экспериментальное исследование возможностей использования обученной нейронной сети для классификации своих изображений.
URI: http://elib.bsu.by/handle/123456789/185037
Appears in Collections:Цикл дисциплин специализации. Семестр 5-7_ПИ
Цикл дисциплин специализации. Семестр 5-7_ИНФ

Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Учебная деятельность | Кафедра инженерной кибернетики НИТУ «МИСиС»

Направление «Прикладная математика» это:

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

Кафедра осуществляет подготовку специалистов:

По окончании обучения студенты кафедры получают возможность работать по самым востребованным IT-специальностям:

  • руководитель IT-проектов,
  • системный аналитик,
  • программист — специалист по информационным системам и ресурсам,
  • IT-менеджер и др.

Перечень изучаемых дисциплин:

  • Mathematics in Data Science/Математика в науке о данных
  • Методы исследования и моделирования информационных процессов и технологий
  • OLAP-технологии
  • Алгоритмы дискретной математики
  • Архитектура многопроцессорных систем
  • Базы данных
  • Вычислительные машины, системы и сети
  • Глобальные сети
  • Дискретные и нелинейные системы автоматического управления
  • Имитационное моделирование
  • Инструментальные средства разработки систем распознавания
  • Интеллектуальная обработка изображений
  • Интернет-программирование
  • Искусственные нейронные сети
  • Исследование операций
  • Комбинаторика и теория графов
  • Математические и инструментальные методы поддержки принятия решений
  • Математические методы в компьютерной графике
  • Математическое моделирование
  • Машинное обучение
  • Методология и технология проектирования информационных систем
  • Методы и средства обработки изображений
  • Методы искусственного интеллекта
  • Методы искусственного интеллекта в робототехнических системах
  • Методы оптимизации
  • Модели и методы мультиагентного моделирования сложных социальных и экономических систем
  • Информатика
  • Компьютерная поддержка принятия решений
  • Лидерство и управление командой проекта
  • Менеджмент Start Up проектов
  • Моделирование и анализ бизнес-процессов
  • Нейронные сети
  • Облачные и распределенные вычисления
  • Облачные технологии
  • Объектно-ориентированное программирование
  • Операционные системы и среды
  • Оптимизационное моделирование сложных систем
  • Основы дискретной математики
  • Основы программной архитектуры
  • Основы программной инженерии
  • Основы теории информации
  • Основы теории систем
  • Параллельные вычисления
  • Прикладной статистический анализ
  • Программирование и алгоритмизация
  • Разработка клиент-серверных приложений
  • Разработка мобильных приложений
  • Сетевые технологии
  • Системная инженерия
  • Системный анализ и принятие решений
  • Системы обеспечения информационной безопасности
  • Системы управления информационной безопасностью
  • Современные инновационные IT-тренды
  • Современные инструментальные средства разработки
  • Современные технологии разработки мобильных приложений
  • Современные языки и методы программирования
  • Специальные главы информатики и вычислительной техники
  • Специальные главы математики для Computer Science
  • Специальные главы по базам данных
  • Стандартизация, сертификация и Управление качеством ПО
  • Теория автоматов и алгоритмов
  • Теория случайных процессов
  • Управление знаниями
  • Фрактальная геометрия
  • Численные методы
  • Экспертные системы

границ | От редакции: Spiking Neural Network Learning, Benchmarking, Programming and Executing

Введение

Нейронная сеть с импульсами (SNN), тип нейронной сети, вдохновляемой мозгом, имитирует биологический мозг, в частности, его нейронные коды, нейродинамику и схемы. SNN вызвали большой интерес как в сообществе искусственного интеллекта (AI), так и в неврологии, учитывая их большой потенциал в биологически реалистичном моделировании человеческого познания и разработке энергоэффективного аппаратного обеспечения машинного обучения, управляемого событиями (Pei et al., 2019; Рой и др., 2019). Значительный прогресс был достигнут в широком спектре областей искусственного интеллекта, таких как обработка изображений, распознавание речи и машинный перевод. Они во многом обусловлены развитием искусственных нейронных сетей (ИНС) в теориях систематического обучения, явных тестах производительности с различными задачами и наборами данных, дружественными инструментами программирования [например, TensorFlow (Abadi et al., 2016) и Pytorch (Paszke et al. , 2019) инструменты машинного обучения] и эффективные платформы обработки [например, графический процессор (GPU) и тензорный процессор (TPU) (Jouppi et al., 2017)]. Для сравнения, SNN все еще находятся на ранней стадии в этих аспектах. Чтобы в дальнейшем использовать преимущества SNN и привлечь больше исследователей для участия в этой области, мы предложили тему исследования на границах в нейробиологии, чтобы обсудить основные проблемы и будущие перспективы SNN, уделяя особое внимание ее «алгоритмам обучения, сравнительному анализу, программированию и выполнению. . » Мы уверены, что SNN будут играть решающую роль в разработке энергоэффективных устройств машинного обучения за счет совместной разработки алгоритмов и оборудования.

Эта тема исследования объединяет исследователей из разных дисциплин, чтобы представить свои недавние работы в SNN. Мы получили 22 заявки со всего мира и приняли 15 работ. Объем принятых статей охватывает алгоритмы обучения, эффективность моделей, инструменты программирования и нейроморфное оборудование.

Алгоритмы обучения

Алгоритмы обучения играют, пожалуй, самую важную роль в методах искусственного интеллекта. Алгоритмы машинного обучения, в частности для глубоких нейронных сетей (DNN), стали стандартом в широком спектре задач ИИ.Некоторые из наиболее распространенных алгоритмов обучения включают обратное распространение (Hecht-Nielsen, 1992), стохастический градиентный спуск (SGD) (Bottou, 2012) и оптимизацию ADAM (Kingma and Ba, 2014). Другие методы, такие как пакетная нормализация (Ioffe and Szegedy, 2015) и распределенное обучение (Dean et al., 2012), облегчают обучение в DNN и позволяют применять их в различных реальных приложениях. Для сравнения, алгоритмов и методов обучения SNN относительно меньше. Существующие алгоритмы обучения SNN делятся на три категории: алгоритмы обучения без учителя, такие как исходная пластичность, зависящая от времени всплеска (STDP) (Querlioz et al., 2013; Диль и Кук, 2015; Kheradpisheh et al., 2016), косвенное контролируемое обучение, такое как преобразование ANN в SNN (O’Connor et al., 2013; Pérez-Carrasco et al., 2013; Diehl et al., 2015; Sengupta et al., 2019) и прямое контролируемое обучение, такое как пространственно-временное обратное распространение (Wu et al., 2018, 2019a, b). Мы отмечаем, что прогресс в исследованиях STDP включает введение сигнала вознаграждения или наблюдения, такого как время всплеска, которое в сочетании с этим третьим фактором диктует изменения веса (Paugam-Moisy et al., 2006; Franosch et al., 2013). Несмотря на достигнутый прогресс, ни один алгоритм пока не может эффективно обучать очень глубокие SNN, что стало чуть ли не святым Граалем в нашей области. Ниже мы кратко резюмируем принятые алгоритмы в этой теме исследования.

Вдохновленные обонятельной системой млекопитающих, Бортакур и Клеланд разработали модель SNN, обученную с использованием STDP для восстановления и идентификации сигналов. Это широко применимо к входам матрицы датчиков. Луо и др. предложить новый механизм обновления весов, который регулирует синаптические веса, приводя к первому неправильному временному интервалу выходных пиков для точной классификации входных цепочек пиков с помощью чувствительной ко времени информации.He et al. разделите процесс обучения (силовой тренировки) на две фазы: фазу формирования структуры с использованием правила Хебба и фазу параметрической тренировки с использованием STDP и обучения с подкреплением, чтобы сформировать систему ассоциативной памяти на основе SNN. В отличие от простой тренировки синаптических весов, Wang et al. предложить обучение как синаптических весов, так и задержек с использованием градиентного спуска, чтобы добиться лучшей производительности. Основываясь на структурно фиксированной небольшой SNN с редкими повторяющимися связями, Ponghiran et al.используйте Q-обучение для обучения только своего выходного уровня, чтобы достичь производительности человеческого уровня в сложных задачах обучения с подкреплением, таких как игры Atari. Их исследования показывают, что небольшой случайный повторяющийся SNN может предоставить вычислительно эффективную альтернативу современным сетям глубокого обучения с подкреплением с несколькими уровнями обучаемых параметров. Вышеупомянутые работы сделали хороший прогресс в направлении более эффективных алгоритмов обучения SNN. Мы уверены, что в будущем мы добьемся дальнейшего прогресса в этой области.

Эффективность модели

В последние годы были предложены аппаратно-ориентированные методы сжатия DNN, которые обеспечивают значительную экономию памяти и аппаратное ускорение (Han et al., 2015a, 2016; Zhang et al., 2016; Huang et al., 2017; Aimar et al., 2018). В настоящее время предлагается множество методов сжатия, которые обеспечивают компромисс между эффективностью обработки и точностью приложения (Han et al., 2015b; Novikov et al., 2015; Zhou et al., 2016). Такой подход также прижился при разработке ускорителей SNN (Deng et al., 2019), со следующим вкладом в эту тему исследования. Афшар и др. исследовать, как аппаратно эффективный вариант STDP может использоваться для извлечения функций на основе событий. Используя строгую структуру тестирования, оценивается ряд пространственно-временных ядер с различными методами распада поверхности, функциями распада, размерами восприимчивого поля, номерами признаков и внутренними классификаторами. Это подробное исследование дает полезные сведения и эвристику в отношении компромисса между производительностью и сложностью при использовании правила STDP.Pedroni et al. изучить влияние различных схем синаптических таблиц связности на хранение веса и обновления STDP для крупномасштабных нейроморфных систем. Основываясь на своем анализе, они представляют альтернативную формулировку STDP через механизм отложенного причинно-следственного обновления, который обеспечивает эффективное хранение веса и доступ как для полной, так и для разреженной связи.

Помимо сложности модели, несколько других статей сосредоточены на прямом сжатии SNN. Сурес и Кудитипуди предлагают Deep-LSM, комбинацию случайно соединенных скрытых слоев и неконтролируемых уровней «победитель получает все» для захвата сетевой динамики, за которой следует слой считывания с модулированным вниманием для классификации.Связи между скрытыми слоями и слоями «победитель получает все» частично обучаются с помощью STDP. Их модель SNN применяется в задаче распознавания видео активности от первого лица, обеспечивая высочайшую производительность с памятью> 90% и экономией операций по сравнению с долговременной памятью (LSTM). На основе единого полностью подключенного уровня с правилом обучения STDP Shi et al. предложите метод мягкой обрезки, который устанавливает часть весов на нижнюю границу во время обучения, эффективно достигая> 75% обрезки.Сринивасан и Рой реализуют сверточные слои с пиками, состоящие из ядер бинарных весов, которые обучаются с использованием вероятностного STDP, а также полносвязные слои без пиков, которые обучаются с использованием градиентного спуска. Предложен остаточный сверточный SNN, который обеспечивает сжатие модели> 20x.

Инструменты программирования

Инструменты программирования

были одним из ключевых компонентов, способствующих развитию исследований ИНС, примерами которых являются Theano (Al-Rfou et al., 2016), TensorFlow (Abadi et al., 2016), Caffe (Jia et al., 2014) и Pytorch (Paszke et al., 2019), MXNet (Chen et al., 2015), Keras (Chollet, 2015). Эти удобные для пользователя инструменты программирования позволяют исследователям создавать и обучать крупномасштабные ИНС, используя только базовые ноу-хау в области программирования. Для сравнения, инструменты программирования для SNN довольно ограничены. Насколько нам известно, только SpiNNaker (Furber et al., 2014), BindsNET (Hazan et al., 2018) и PyNN (Davison et al., 2009) предоставляют базовый программный интерфейс для поддержки простых и небольших симуляций SNN. .Обычно исследователи должны строить SNN с нуля, что может занять много времени и потребовать значительно большего количества ноу-хау в области программирования. Таким образом, разработка удобных инструментов программирования для эффективного развертывания крупномасштабных сетей SNN необходима для развития нашей области. В этой теме исследования была предложена среда для высокоскоростного моделирования SNN с открытым исходным кодом, основанная на PyTorch. SpykeTorch (Mozafari et al.) Моделирует сверточные SNN с максимум одним импульсом на нейрон (схема рангового кодирования) и правилами обучения на основе STDP.Хотя инструменты программирования для SNN все еще находятся в зачаточном состоянии, мы считаем, что необходимо провести дополнительные исследования, чтобы обучение SNN могло приблизиться к эффективности обучения ANN.

Нейроморфное оборудование

Последние достижения в моделировании SNN in-silico , продемонстрированные Neurogrid из Стэнфордского университета (Benjamin et al., 2014), BrainScales из Гейдельбергского университета (Schemmel et al., 2012), SpiNNaker из Манчестерского университета, Тианджик, США. Университет Цинхуа (Пей и др., 2019), IBM TrueNorth (Akopyan et al., 2015) и Intel Loihi (Davies et al., 2018) свидетельствуют о большом потенциале аппаратной реализации SNN. В этой теме исследования Shukla et al. повторно смоделировать крупномасштабные CNN, чтобы смягчить аппаратные ограничения, и реализовать их на IBM TrueNorth. Была продемонстрирована CNN, используемая для обнаружения и подсчета автомобилей, с разумной точностью по сравнению с CNN, обученной на GPU, но с гораздо меньшим энергопотреблением. Bohnstingl et al. реализовать на нейроморфном чипе сеть обучения для обучения, которая ускоряет процесс обучения за счет извлечения абстрактных знаний из предшествующего опыта.Помимо обычных КМОП-схем, в этой теме исследования также изучались новые устройства, такие как мемристоры. Guo et al. предложить алгоритм жадного обучения на основе STDP для сетей SNN, чтобы снизить уровни веса и повысить устойчивость к неидеальным устройствам. Они демонстрируют онлайн-обучение в системе резистивной оперативной памяти (RRAM) с неидеальным поведением. Fang et al. предложить обобщенную модель интеллекта роя на SNN: SI-SNN. SNN реализованы как агенты в роевом интеллекте с интерактивной модуляцией и синхронизацией.Они реализуют такую ​​нейродинамику на аппаратной платформе на основе сегнетоэлектрического полевого транзистора (FeFET) для решения задач оптимизации с высокой производительностью и эффективностью.

Выводы

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

Авторские взносы

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

Финансирование

Эта работа частично поддержана Национальной программой ключевых исследований и разработок Китая (№ 2018AAA0102600 и 2018YFE0200200), Пекинской академией искусственного интеллекта (BAAI), Инициативной программой научных исследований, а также грантом Института Го Цяна, Университета Цинхуа и ключевыми научными организациями. научно-исследовательский проект технологических инноваций Министерства образования и Специального инновационного фонда Цинхуа-Фошань.

Конфликт интересов

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

Список литературы

Abadi, M., Barham, P., Chen, J., Chen, Z., Davis, A., Dean, J., et al. (2016). «Tensorflow: система для крупномасштабного машинного обучения», , 12-й симпозиум {USENIX} по проектированию и внедрению операционных систем ({OSDI} 16), (Саванна, Джорджия), 265–283.

Google Scholar

Аймар А., Мостафа Х., Калабрезе Э., Риос-Наварро А., Тапиадор-Моралес Р., Лунгу И.-А. и др. (2018). Nullhop: гибкий ускоритель сверточной нейронной сети, основанный на разреженных представлениях карт функций. IEEE Trans. Neural Netw. Учить. Syst. 30, 644–656. DOI: 10.1109 / TNNLS.2018.2852335

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Акопян, Ф., Савада, Дж., Кэссиди, А., Альварес-Икаса, Р., Артур, Дж., Меролла, П. и др. (2015). Труенорт: дизайн и набор инструментов программируемого нейросинаптического чипа мощностью 65 МВт и 1 миллион нейронов. IEEE Trans. Comput. Помощь Дес. Интегр. Circuits Syst. 34, 1537–1557. DOI: 10.1109 / TCAD.2015.2474396

CrossRef Полный текст | Google Scholar

Аль-Рфу, Р., Ален, Г., Альмахайри, А., Ангермюллер, К., Бахданау, Д., Баллас, Н., и др. (2016). Theano: среда Python для быстрого вычисления математических выражений. arXiv [препринт] arXiv : 1605.02688.

Google Scholar

Бенджамин, Б. В., Гао, П., Маккуинн, Э., Чоудхари, С., Чандрасекаран, А. Р., Буссат, Ж.-М. и др. (2014). Neurogrid: смешанная аналого-цифровая многокристальная система для крупномасштабного нейронного моделирования. Proc. IEEE 102, 699–716. DOI: 10.1109 / JPROC.2014.2313565

CrossRef Полный текст | Google Scholar

Ботту, Л. (2012). «Уловки стохастического градиентного спуска», в Neural Networks: Tricks of the Trade , eds G.Монтавон, Г. Б. Орр и К. Р. Мюллер (Берлин; Гейдельберг: Springer, 421–436.

)

Google Scholar

Chen, T., Li, M., Li, Y., Lin, M., Wang, N., Wang, M., et al. (2015). Mxnet: гибкая и эффективная библиотека машинного обучения для разнородных распределенных систем. arXiv [препринт] arXiv : 1512.01274.

Google Scholar

Дэвис, М., Сриниваса, Н., Лин, Т.-Х., Чинья, Г., Цао, Ю., Чодей, С.Х., и др. (2018). Loihi: нейроморфный многоядерный процессор с обучением на кристалле. IEEE Micro 38, 82–99. DOI: 10.1109 / MM.2018.112130359

CrossRef Полный текст | Google Scholar

Дэвисон, А. П., Брюдерле, Д., Эпплер, Дж. М., Кремков, Дж., Мюллер, Э., Печевски, Д., и др. (2009). PyNN: общий интерфейс для симуляторов нейронных сетей. Фронт. Нейроинформ. 2:11. DOI: 10.3389 / нейро.11.011.2008

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Дин, Дж., Коррадо, Г., Монга, Р., Чен, К., Девин, М., Мао М. и др. (2012). «Крупномасштабные распределенные глубокие сети», в книге Advances in Neural Information Processing Systems (Lake Tahoe, NV), 1223–1231.

Google Scholar

Deng, L., Wu, Y., Hu, Y., Liang, L., Li, G., Hu, X., et al. (2019). Комплексное сжатие SNN с использованием оптимизации ADMM и регуляризации активности. arXiv [препринт] arXiv : 1911.00822.

Google Scholar

Дил, П. У., Нил, Д., Бинас, Дж., Кук, М., Лю, С.-C., И Пфайффер, М. (2015). «Быстрая классификация и высокая точность пиков глубоких сетей за счет балансировки веса и порога», в Международной совместной конференции по нейронным сетям (IJCNN) 2015 г., (Килларни: IEEE), 1–8.

Google Scholar

Франош, Дж. М. П., Урбан, С., и ван Хеммен, Дж. Л. (2013). Контролируемая пластичность, зависящая от времени спайков: пространственно-временное правило обучения нейронов для аппроксимации функций и принятия решений. Neural Comput. 25, 3113–3130.DOI: 10.1162 / NECO_a_00520

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Фурбер, С. Б., Галлуппи, Ф., Темпл, С., и Плана, Л. А. (2014). Проект спинакера. Proc. IEEE 102, 652–665. DOI: 10.1109 / JPROC.2014.2304638

CrossRef Полный текст | Google Scholar

Хан, С., Лю, X., Мао, Х., Пу, Дж., Педрам, А., Горовиц, М.А., и др. (2016). EIE: эффективный механизм вывода на сжатой глубокой нейронной сети. ACM SIGARCH Comput.Архитектор. Новости 44, 243–254. DOI: 10.1145 / 3007787.3001163

CrossRef Полный текст | Google Scholar

Хан, С., Мао, Х. и Далли, В. Дж. (2015a). Глубокое сжатие: сжатие глубоких нейронных сетей с сокращением, обученным квантованием и кодированием Хаффмана. arXiv [препринт] arXiv : 1510.00149.

Google Scholar

Хан, С., Пул, Дж., Тран, Дж., И Далли, В. (2015b). «Изучение весов и связей для эффективной нейронной сети», в Advances in Neural Information Processing Systems , 1135–1143.

Google Scholar

Hazan, H., Saunders, D. J., Khan, H., Patel, D., Sanghavi, D. T., Siegelmann, H. T., et al. (2018). Bindsnet: ориентированная на машинное обучение библиотека нейронных сетей на Python. Фронт. Нейроинформ. 12:89. DOI: 10.3389 / fninf.2018.00089

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Hecht-Nielsen, R. (1992). «Теория нейронной сети обратного распространения», в Neural Networks for Perception , ed H.Векслер (Эльзевир), 65–93.

Google Scholar

Хуанг, Х., Ни, Л., Ван, К., Ван, Ю., и Ю, Х. (2017). Высокопараллельный и энергоэффективный трехмерный многослойный ускоритель CMOS-RRAM для тензорной нейронной сети. IEEE Trans. Nanotechnol. 17, 645–656. DOI: 10.1109 / TNANO.2017.2732698

CrossRef Полный текст | Google Scholar

Иоффе С., Сегеди К. (2015). Пакетная нормализация: ускорение глубокого обучения сети за счет уменьшения внутреннего ковариатного сдвига. arXiv [препринт] arXiv : 1502.03167.

Google Scholar

Джиа Ю., Шелхамер Э., Донахью Дж., Караев С., Лонг Дж., Гиршик Р. и др. (2014). «Caffe: сверточная архитектура для быстрого встраивания функций», в Proceedings of the 22nd ACM International Conference on Multimedia (Орландо, Флорида), 675–678.

Google Scholar

Джуппи, Н. П., Янг, К., Патил, Н., Паттерсон, Д., Агравал, Г., Баджва, Р. и др. (2017). «Анализ производительности блока тензорной обработки в центре обработки данных», в Proceedings of the 44th Annual International Symposium on Computer Architecture (Toronto, ON), 1–12.

Google Scholar

Херадпишех, С. Р., Ганджтабеш, М., и Маскелье, Т. (2016). Неконтролируемое изучение визуальных функций на основе биологических исследований приводит к надежному инвариантному распознаванию объектов. Нейрокомпьютеры 205, 382–392. DOI: 10.1016 / j.neucom.2016.04.029

CrossRef Полный текст | Google Scholar

Кингма Д. П. и Ба Дж. (2014). Адам: метод стохастической оптимизации. arXiv [препринт] arXiv : 1412.6980.

Google Scholar

Новиков, А., Подоприхин Д., Осокин А., Ветров Д. П. (2015). «Тензорные нейронные сети», в Advances in Neural Information Processing Systems (Montreal, QC), 442–450.

Google Scholar

О’Коннор, П., Нил, Д., Лю, С.-К., Дельбрук, Т., и Пфайффер, М. (2013). Классификация в реальном времени и объединение датчиков с разветвленной сетью глубоких убеждений. Фронт. Neurosci. 7: 178. DOI: 10.3389 / fnins.2013.00178

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Пашке, А., Гросс, С., Масса, Ф., Лерер, А., Брэдбери, Дж., Чанан, Г. и др. (2019). «PyTorch: императивная высокопроизводительная библиотека глубокого обучения», в книге Advances in Neural Information Processing Systems (Ванкувер, Британская Колумбия), 8024–8035.

Google Scholar

Погам-Мойзи, Х., Мартинес, Р., и Бенжио, С. (2006). Подход к обучению с учителем, основанный на STDP и полихронизации в нейронных сетях с пиками , IDIAP, EPFL.

Google Scholar

Пей, Дж., Deng, L., Song, S., Zhao, M., Zhang, Y., Wu, S., et al. (2019). На пути к искусственному интеллекту с гибридной архитектурой чипов Тянджик. Природа 572, 106–111. DOI: 10.1038 / s41586-019-1424-8

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Перес-Карраско, Дж. А., Чжао, Б., Серрано, К., Ача, Б., Серрано-Готарредона, Т., Чен, С. и др. (2013). Преобразование от систем видения, управляемых кадрами, к системам машинного зрения, управляемым событиями без кадров, с помощью низкоскоростного кодирования и обработки совпадений — приложение к ConvNets с прямой связью. IEEE Trans. Pattern Anal. Мах. Intell. 35, 2706–2719. DOI: 10.1109 / TPAMI.2013.71

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Кверлиоз Д., Бихлер О., Дольфус П. и Гамрат К. (2013). Невосприимчивость к вариациям устройств в нейронной сети с мемристическими наноустройствами. IEEE Trans. Nanotechnol. 12, 288–295. DOI: 10.1109 / TNANO.2013.2250995

CrossRef Полный текст | Google Scholar

Шеммель, Дж., Грюбль, А., Hartmann, S., Kononov, A., Mayr, C., Meier, K., et al. (2012). «Живая демонстрация: уменьшенная версия нейроморфной системы в масштабе пластин мозга», в IEEE International Symposium on Circuits and Systems (Сеул: IEEE), 702–702, 2012 г.

Google Scholar

Сенгупта, А., Е, Ю., Ван, Р., Лю, К., и Рой, К. (2019). Углубляемся в пики нейронных сетей: vgg и остаточные архитектуры. Фронт. Neurosci. 13:95. DOI: 10.3389 / fnins.2019.00095

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Ву, Дж., Чуа, Ю., Чжан, М., Ян, К., Ли, Г., и Ли, Х. (2019a). «Нейронная сеть с глубокими пиками с правилом обучения на основе подсчета пиков», Международная объединенная конференция по нейронным сетям 2019 г. (IJCNN) (Будапешт: IEEE), 1–6.

Google Scholar

У Ю., Дэн, Л., Ли, Г., Чжу, Дж., И Ши, Л. (2018). Пространственно-временное обратное распространение для обучения высокопроизводительных нейронных сетей с пиками. Фронт. Neurosci. 12: 331. DOI: 10.3389 / fnins.2018.00331

PubMed Аннотация | CrossRef Полный текст | Google Scholar

У Ю., Дэн, Л., Ли, Г., Чжу, Дж., Се, Ю., и Ши, Л. (2019b). «Прямое обучение для наращивания нейронных сетей: быстрее, больше, лучше», в материалах Proceedings of the AAAI Conference on Artificial Intelligence (Гонолулу, Гавайи), 1311–1318.

Google Scholar

Zhang, S., Du, Z., Zhang, L., Lan, H., Liu, S., Li, L., et al.(2016). «Cambricon-x: ускоритель для разреженных нейронных сетей», , 2016, 49-й ежегодный международный симпозиум IEEE / ACM по микроархитектуре (MICRO), (Тайбэй: IEEE), 1–12.

Google Scholar

Чжоу, С., Ву, Ю., Ни, З., Чжоу, X., Вэнь, Х., и Цзоу, Ю. (2016). Dorefa-net: обучение сверточных нейронных сетей с низкой пропускной способностью и градиентами с низкой пропускной способностью. arXiv [препринт] arXiv : 1606.06160.

Google Scholar

Добавьте мощные возможности нейронной сети в свои корпоративные приложения на C #: R.Коул, Мэтт: 978178961 2011: Amazon.com: Книги

Создание и раскрытие возможностей нейронных сетей путем реализации кода C # и .Net

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

Нейронные сети неожиданно вернулись за последние несколько лет и внесли огромные инновации в мир искусственного интеллекта.

Цель этой книги — предоставить программистам на C # практическое руководство по решению сложных вычислительных задач с использованием нейронных сетей и библиотек C #, таких как CNTK и TensorFlowSharp. Эта книга проведет вас в пошаговое практическое путешествие, охватывающее все, от математических и теоретических аспектов нейронных сетей до создания собственных глубоких нейронных сетей в ваших приложениях с помощью сред C # и .NET.

Эта книга начинается с краткого освежения знаний о нейронных сетях.Вы узнаете, как построить нейронную сеть с нуля, используя такие пакеты, как Encog, Aforge и Accord. Вы узнаете о различных концепциях и методах, таких как глубокие сети, перцептроны, алгоритмы оптимизации, сверточные сети и автоэнкодеры. Вы узнаете, как добавлять интеллектуальные функции в свои .NET-приложения, такие как обнаружение лиц и движения, обнаружение и маркировка объектов, понимание языка, знания и интеллектуальный поиск.

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

Что вы узнаете
  • Поймите перцептроны и как их реализовать на C #
  • Узнайте, как обучать и визуализировать нейронную сеть с помощью когнитивных сервисов
  • Выполнять распознавание изображений для обнаружения и маркировки объектов с помощью C # и TensorFlowSharp
  • Обнаруживать определенные характеристики изображения, такие как лицо, с помощью Accord.Net
  • Продемонстрируйте оптимизацию роя частиц с помощью простой задачи XOR и Encog
  • Обучите сверточные нейронные сети с помощью ConvNetSharp
  • Найдите оптимальные параметры для функций нейронной сети, используя числовые и эвристические методы оптимизации.
Для кого предназначена эта книга

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

Оглавление
  1. Краткое руководство
  2. Совместное создание нашей первой нейронной сети
  3. Решающая коса и случайные леса
  4. Лицо и Обнаружение движения
  5. Обучение CNN с использованием ConvNetSharp
  6. Обучение автоэнкодеров с использованием RNNSharp
  7. Замена обратного распространения с помощью PSO
  8. Оптимизация функций; Как и почему
  9. Поиск оптимальных параметров
  10. Обнаружение объектов с помощью TensorFlowSharp
  11. Прогнозирование временных рядов и LSTM с использованием CNTK
  12. GRU по сравнению с LSTM, RNN и сетями прямого распространения
  13. Приложение A- Приложение A- Оптимизация функций
  14. Время работы
  15. Каталожный номер

deeplizard — не найдено

  • YouTube
  • Создать вопрос викторины
  • Conv Demo
  • Демо Max-Pool
  • Премиум курс GAN НОВИНКА
  • Профиль
  • Выйти
  • Авторизоваться
DEEPLIZARD
  • Курсы
    Курсы глубокого обучения
    Основы машинного обучения и глубокого обучения Keras — API нейронной сети для глубокого обучения Python Программирование нейронных сетей — глубокое обучение с PyTorch Обучение с подкреплением — Целенаправленный интеллект Введение в генеративные состязательные сети
    Другие курсы
    Наука о данных — научитесь программировать для начинающих Торговля — Расширенные типы ордеров с Coinbase Waves — Платформа блокчейна Proof of Stake и DEX Zcash — блокчейн-платформа на основе конфиденциальности Steemit — социальная сеть на базе блокчейна Jaxx — интерфейс блокчейна и крипто-кошелек AWS — Управление EC2 Amazon Web Services
  • Код
  • Коллективный разум
  • Видеоблог

Черная дыра

  • © deeplizard
  • YouTube
  • Видеоблог
  • Коллективный разум
  • Код
  • Конфиденциальность
  • Условия

keyboard_arrow_up

Нейронное программирование на примере

% PDF-1.4 % 120 0 объект > / OCGs [123 0 R] >> / OutputIntents [117 0 R] / PageLabels 115 0 R / Страницы 14 0 R / Тип / Каталог >> эндобдж 122 0 объект > / Шрифт >>> / Поля 127 0 R >> эндобдж 119 0 объект > поток 2017-01-21T19: 40: 05-08: 00TeX2017-01-22T14: 18: 25-08: 002017-01-22T14: 18: 25-08: 00 Это pdfTeX, версия 3.14159265-2.6-1.40.17 (TeX Live 2016) kpathsea версия 6.2.2 Acrobat Distiller 15.0 (Macintosh) Приложение FalseMachine Learning Applications / pdf

  • Chengxun Shu, Hongyu Zhang
  • Нейронное программирование на примере
  • Copyright © 2017 Ассоциация развития искусственного интеллекта
  • Материалы тридцать первой конференции AAAI по искусственному интеллекту (AAAI-17)
  • Приложения для машинного обучения
  • Правдаhttp: // www.aaai.orguuid: 376171a0-091d-7c49-b92f-5fb8dfced494uuid: 4874499a-2777-a14c-b619-c26e23b49bfb1B конечный поток эндобдж 115 0 объект > эндобдж 14 0 объект > эндобдж 2 0 obj > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >> эндобдж 15 0 объект > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >> эндобдж 23 0 объект > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >> эндобдж 29 0 объект > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >> эндобдж 35 0 объект > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >> эндобдж 38 0 объект > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >> эндобдж 41 0 объект > / Font> / ProcSet [/ PDF / Text] / XObject >>> / Type / Page >> эндобдж 146 0 объект > поток HW [s ۺ ~ ϯ # Ա xH> qxbw: 0 KIBK [, (VҦ, v% oG7 ~ {{ϖn `vs * yIRy ~ nW ش E = i7_ ^ wd igq2Mİzjy? JcWGNx̲SMSKf = xM5n ޿ gNu Ма [Usd1S.y eǓK {эВ Ֆ ctCGǠ ? kT [Z -: t ~ o’SBzf00g! Ni`

    Учебники по программированию на Python


    Введение в нейронные сети

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

    Искусственная нейронная сеть, которую я сейчас буду называть нейронной сетью, не является новой концепцией.Идея существует с 1940-х годов, и у нее было несколько взлетов и падений, особенно по сравнению с машиной опорных векторов (SVM). Например, нейронная сеть была популяризирована до середины 90-х годов, когда было показано, что SVM, использующая новую для публики (сама техника была придумана задолго до того, как она была фактически введена в действие), метод » Уловка ядра «, была способна работать с нелинейно разделяемыми наборами данных. С этим машина опорных векторов снова вышла на передний план, оставив позади нейронные сети и почти ничего интересного примерно до 2011 года, когда глубокие нейронные сети начали завоевывать и превосходить машину опорных векторов, используя новые методы, доступность огромных наборов данных и многое другое. более мощные компьютеры.

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

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

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

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

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

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

    Итак, с этой моделью у вас есть входные данные, вы их взвешиваете и передаете через функцию в нейрон. Функция в нейроне — это пороговая функция, которую также называют вашей функцией активации. По сути, это сумма всех значений после взвешивания выше или ниже определенного значения. Если это так, то вы запускаете сигнал (1) или ничего не запускается (0).Затем это взвешивается и передается следующему нейрону, и выполняется такая же функция.

    Это ваша модель нейронной сети. Итак, каковы веса и пороги? Что ж, для начала мы избавляемся от пороговой «переменной» благодаря Полу Вербосу в 1974 году. Вместо того, чтобы рассматривать порог как еще одну переменную для оптимизации, мы берем пороговое значение, присваиваем ему вес -1 и бум, порог всегда равен 0. Независимо от того, какой порог, он отрицает себя и всегда равен нулю.У нас все еще есть уродливая ступенчатая функция, поскольку решение о том, запускает ли нейрон 0 или 1, может быть беспорядочным. Вместо этого мы решили сделать это сигмовидной (s-образной) функцией.

    Что касается весов, они начинаются случайным образом и уникальны для каждого входа в узел / нейрон. Затем в типичной нейронной сети с «прямой связью» (ваш самый простой тип) ваша информация проходит прямо через созданную вами сеть, и вы сравниваете результат с тем, что, как вы надеялись, на выходе использовались бы ваши образцы данных.Отсюда вам необходимо настроить веса, чтобы результат соответствовал желаемому результату. Акт отправки данных прямо через нейронную сеть называется нейронной сетью с прямой связью . Наши данные идут от входа к слоям по порядку, а затем к выходу. Когда мы идем назад и начинаем корректировать веса для минимизации потерь / затрат, это называется обратным распространением .

    Это новая задача оптимизации. Вспомните задачу оптимизации машины опорных векторов из нескольких руководств назад и то, как мы объясняли, что это хорошая задача выпуклой оптимизации.Несмотря на то, что у нас было две переменные, наша проблема оптимизации заключалась в идеальной форме чаши, поэтому мы оба могли знать, когда мы достигли оптимизации, а также предпринять огромные шаги на этом пути, чтобы сделать обработку дешевой. С нейронной сетью дело обстоит иначе. На практике вы смотрите на что-то вроде сотен тысяч переменных, миллионов или больше. Первоначальным решением здесь было использование стохастического градиентного спуска, но есть и другие варианты, такие как AdaGrad и Adam Optimizer. Тем не менее, это огромная вычислительная задача.

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

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

    Для простых задач классификации нейронная сеть относительно близка по производительности к другим простым алгоритмам, даже таким, как K Nearest Neighbours.Настоящая красота нейронных сетей заключается в гораздо большем объеме данных и гораздо более сложных вопросах, которые ставят другие модели машинного обучения в позор. Например, современные нейронные сети могут делать такие вещи, как answer:

    Джеку 12 лет. Джейн 10. Кейт старше Джейн и моложе Джека. Сколько лет Кейт?

    Ответ — 11, и модель глубокого обучения может это выяснить, даже если вы каким-то образом не научите ее, как на самом деле выполнять логическую часть. Вы просто передаете необработанные данные, которые будут либо словами, либо даже символами, а нейронная сеть сделает все остальное.Ах да, вам нужны миллионы образцов! Под миллионами я подразумеваю около полумиллиарда для идеальной точности.

    Где взять миллионы образцов вещей? У вас есть несколько вариантов. Один из вариантов с данными изображений — это ImageNet , который в организации вещей работает так же, как wordnet. Если вы не знакомы, вы можете покопаться, чтобы получить представление. Там все бесплатно. Далее, для текстовых данных самая первая остановка должна быть чем-то вроде дампа данных википедии . Это полезно для задач более глубокого обучения, а не только для помеченных данных.Затем, чтобы получить еще больше текстовых данных, почему бы не перейти на большую часть веб-сайтов, которые уже просканированы и проанализированы для вас? Если это звучит забавно, попробуйте CommonCrawl . Этот набор данных — не шутка, однако это петабайты данных. Что касается речи, я не знаю многих с головы до ног. Один из вариантов — это что-то вроде Tatoeba , у которого есть как ярлыки, так и даже некоторые переводы, что очень полезно. Когда ничего не помогает, вы можете попытаться создать свои собственные наборы данных, но требования к размеру довольно сложны.Кроме того, вы всегда можете поспрашивать. По моему опыту, есть набор данных для чего угодно, вам просто нужно его найти. Часто Google терпит неудачу при попытке найти наборы данных, но люди могут вам помочь. На данный момент вы можете попробовать спросить в подреддите Machine Learning , поскольку, вероятно, 90% того, что там происходит, связано с нейронными сетями, и все должны знать о массивных наборах данных.

    Теперь должно быть относительно очевидно, почему такие компании, как Facebook и Google, так увлечены искусственным интеллектом и особенно нейронными сетями.На самом деле они обладают необходимыми объемами данных, чтобы делать очень интересные вещи.

    Теперь, когда мы разобрались с этим, как мы собираемся работать с нейронными сетями? Мы собираемся использовать TensorFlow, относительно новый пакет от Google, все еще находящийся в стадии бета-тестирования на момент написания этой статьи. Существуют и другие пакеты, используемые для машинного обучения, такие как Theano или Torch, но все они работают одинаково. Нам действительно просто нужно выбрать один, и я выбираю Tensorflow. В следующем уроке мы собираемся установить TensorFlow.Если у вас уже установлен TensorFlow, вы можете пропустить следующее руководство (либо используйте боковую панель навигации, либо просто перейдите к следующему, прокрутите вниз и снова нажмите «Далее»).


    Существует 1 викторин / вопросов для этого руководства. Зарегистрируйтесь до + = 1 для доступа к ним, загрузки видео и отсутствия рекламы.

    Следующее руководство: Установка TensorFlow для глубокого обучения — ДОПОЛНИТЕЛЬНО


    Модель интеллектуальной поддержки на основе нейронной сети для завершения программного кода

    В последние годы во всем мире ежедневно генерируются миллионы исходных кодов на разных языках.Модель интеллектуальной поддержки на основе глубокой нейронной сети для завершения исходного кода будет большим преимуществом в области разработки программного обеспечения и обучения программированию. Огромное количество синтаксических, логических и других критических ошибок, которые не могут быть обнаружены обычными компиляторами, по-прежнему присутствует в исходных кодах, и разработка интеллектуальной методологии оценки, которая не полагается на ручную компиляцию, стала важной. Даже опытные программисты часто считают необходимым проанализировать всю программу, чтобы найти единственную ошибку, и, таким образом, вынуждены тратить драгоценное время на отладку своих исходных кодов.Помня об этом, мы предложили интеллектуальную модель, основанную на долгосрочной краткосрочной памяти (LSTM), и объединили ее с механизмом внимания для завершения исходного кода. Таким образом, предлагаемая модель может обнаруживать ошибки исходного кода с местоположениями, а затем предсказывать правильные слова. Кроме того, предлагаемая модель может классифицировать исходные коды на предмет того, ошибочны они или нет. Мы обучили нашу предложенную модель, используя исходный код, а затем оценили производительность. Все данные, использованные в наших экспериментах, были извлечены из системы Aizu Online Judge (AOJ).Полученные экспериментальные результаты показывают, что точность с точки зрения обнаружения и прогнозирования ошибок нашей предлагаемой модели составляет примерно 62%, а точность классификации исходного кода составляет примерно 96%, что превосходит стандартные LSTM и другие современные модели. Более того, по сравнению с современными моделями, предложенная нами модель достигла интересного уровня успеха с точки зрения обнаружения, прогнозирования и классификации ошибок при применении к длинным последовательностям исходного кода. В целом, эти экспериментальные результаты указывают на полезность предлагаемой нами модели в области разработки программного обеспечения и обучения программированию.

    1. Введение

    Программирование — одно из самых творческих и эффективных начинаний человечества, и огромное количество исследований было посвящено улучшению моделирования и понимания программного кода [1]. Результаты многих таких исследований теперь поддерживают широкий спектр основных целей разработки программного обеспечения (SE), таких как обнаружение ошибок, прогнозирование ошибок, идентификация местоположения ошибки, предложения фрагментов кода, создание исправлений кода, моделирование разработчика и классификация исходного кода [1] .Поскольку учащиеся и профессионалы во всем мире постоянно создают большое количество новых программ для улучшения нашей жизни, общепризнанным трюизмом является то, что ни одна программа никогда не выпускается без прохождения комплексного процесса отладки после разработки. Практически каждый программный продукт проходит различные фазы тестирования в цикле SE. Фактически, как только ошибки обнаруживаются в исходном коде на этапе производства или тестирования, немедленно начинается процесс отладки, чтобы найти и исправить ошибки. Это означает, что учащиеся и профессионалы тратят огромное количество времени, пытаясь найти ошибки в исходных кодах.Чтобы найти единственную ошибку, часто необходимо проверить всю программу, что является очень длительным процессом и требует много времени. Эта неблагоприятная ситуация привела к появлению нового окна исследования SE [2]. Студенты, программисты и разработчики обычно допускают значительное количество ошибок. К ним относятся отсутствующие точки с запятой, разделители, нерелевантные символы, переменные, недостающие фигурные скобки, неполные круглые скобки, операторы, отсутствующие методы, классы, несоответствующие классы, несоответствующие методы, нерелевантные параметры, логические ошибки и другие критические ошибки.Хотя такие ошибки часто указывают на неопытность, недостаточную концентрацию внимания на деталях и другое неподходящее поведение, исследование Google по программированию показало, что такие ошибки могут закрасться в работу даже самых опытных программистов [3]. Обычно программирование — очень деликатная задача, подверженная ошибкам, и единственная ошибка в конечном итоге может нанести вред конечным пользователям программного обеспечения. Кроме того, исходный код очень подвержен ошибкам во время разработки, поэтому модель интеллектуальной поддержки для завершения кода стала интересной областью исследований.Среди решений, которые сейчас исследуются, использование искусственного интеллекта (ИИ) предлагает захватывающий потенциал для решения проблем, связанных с исходным кодом. За последние несколько лет разработчики обработки естественного языка (NLP) добились выдающихся результатов в различных областях, таких как языковая обработка, машинный перевод и распознавание речи. Причины широкого успеха НЛП кроются в его основанных на корпусах методах, статистических приложениях, предложениях мессенджеров, распознавании почерка и увеличивающемся большом объеме текста.Например, модели n -граммы относятся к формам стохастических языковых моделей, которые можно использовать для прогнозирования следующего элемента на основе корпуса. Различные модели n -грамм, такие как биграмма, триграмма, скип-грамм [4] и GloVe [5], являются статистическими языковыми моделями, которые очень полезны в задачах языкового моделирования. Это растущее использование стимулировало доступность большого корпуса текстов и помогает техникам НЛП становиться более эффективными с каждым днем. Языковая модель НЛП не особенно эффективна при использовании в сложных задачах SE, но все же полезна для интуитивно понятной языковой модели.В результате многочисленные исследователи сосредоточили свои усилия на задачах завершения исходного кода с использованием языковых моделей на основе нейронных сетей. В [6] авторы предложили модель локального кэша, которая учитывала локальность программного кода, но все же сталкивалась с проблемами с исходным кодом с небольшим контекстом, использующим модель n-грамм. Это исследование показало, что языковые модели на основе нейронных сетей могут стать надежной заменой иллюстраций исходного кода. Кроме того, другое исследование показало, что модель рекуррентной нейронной сети (RNN), которая способна сохранять более длительный контекст исходного кода, чем традиционные n-граммы и другие языковые модели, достигла заметных успехов в языковом моделировании [7].Однако модель RNN сталкивается с ограничениями, когда дело доходит до представления контекста более длинных исходных кодов из-за исчезновения или увеличения градиента [8], что затрудняет обучение с использованием длинных зависимых последовательностей исходного кода. В результате он эффективен только для небольшого корпуса исходных кодов. Чтобы минимизировать проблемы исчезновения или взрыва градиента, модель RNN была расширена для создания сетей с долговременной краткосрочной памятью (LSTM) [8]. Сеть LSTM — это особый вид RNN, который может запоминать более длинные последовательности исходного кода из-за своей необычной внутренней структуры.

    В этой статье мы представляем модель интеллектуальной поддержки для автозавершения исходного кода, которая была разработана с использованием LSTM в сочетании с механизмом внимания (тогда известным как LSTM-AM), который увеличивает производительность по сравнению со стандартной моделью LSTM. Механизм внимания — это полезный метод, который учитывает результаты всех прошлых скрытых состояний для прогнозирования. Механизм внимания может повысить точность интеллектуальных моделей на основе нейронных сетей. Мы обучили сети LSTM, RNN, CNN и LSTM-AM с различными скрытыми блоками (нейронами), такими как 50, 100, 200 и 300, используя набор исходных кодов, взятых из системы AOJ.Затем ошибочные исходные коды были введены во все модели, чтобы определить их относительные возможности в отношении прогнозирования и обнаружения ошибок исходного кода. Полученные результаты показывают, что наша сеть LSTM-AM расширяет возможности стандартной сети LSTM с точки зрения правильного обнаружения и прогнозирования таких ошибок. Даже некоторые исходные коды содержат логические ошибки и другие критические ошибки, которые не могут быть обнаружены обычными компиляторами, тогда как предлагаемая нами модель интеллектуальной поддержки может обнаруживать эти ошибки.Кроме того, сеть LSTM-AM может сохранять более длинную последовательность входных данных исходного кода и, таким образом, генерировать более точный вывод, чем стандартный LSTM и другие современные сети. Кроме того, мы добавили различные настройки и скрытые единицы измерения, чтобы создать наиболее подходящую модель для нашего исследования с точки зрения кросс-энтропии, времени обучения, точности и других показателей производительности. Также предлагаемая модель позволяет классифицировать исходные коды на основе дефектов в кодах. Мы ожидаем, что предлагаемая нами модель будет полезна студентам, программистам, разработчикам и профессионалам, а также другим лицам, занимающимся общим образованием в области программирования и другими аспектами SE.

    Основные вклады этого исследования описаны следующим образом: (i) Предлагаемая модель интеллектуальной поддержки может помочь студентам и программистам в завершении исходного кода (ii) Модель интеллектуальной поддержки обнаруживает такие ошибки (логические), которые не могут быть идентифицированы с помощью обычных компиляторы (iii) Предлагаемая точность модели интеллектуальной поддержки составляет примерно 62%, что превосходит другие эталонные модели. (iv) Предлагаемая нами модель может классифицировать исходные коды на основе обнаруженных ошибок. Точность классификации составляет 96%, что намного лучше, чем у других моделей (v) Предлагаемая модель выделяет дефектные места с указанием местоположения / номера строки в исходных кодах (vi) Предлагаемая модель улучшает способность учащихся легко исправлять ошибки в исходном коде, используя расположение / номера строк

    Остальная часть статьи имеет следующую структуру.В разделе 2 мы представляем предысторию нашего исследования и обсуждаем предыдущие исследования. Раздел 3 описывает обзор обработки естественного языка и искусственных нейронных сетей. В разделе 4 мы представляем предлагаемый нами подход. Вопросы сбора данных и описания проблем представлены в разделе 5. Экспериментальные результаты описаны в разделе 6. В разделе 7 мы обсуждаем результаты. С этой целью в Разделе 8 этот документ завершается некоторыми предложениями по будущей работе.

    2. Предпосылки и предшествующие исследования

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

    В [1] авторы представляют языковую модель для тестирования исходного кода, которая использует нейронную сеть вместо существующей языковой модели (например, n -грамм). В большинстве случаев языковые модели n -граммы не могут эффективно обрабатывать длинные последовательности исходного кода, поэтому для улучшения анализа исходного кода были разработаны языковые модели на основе нейронных сетей. В процитированном исследовании были обучены языковые модели RNN и LSTM, и полученные результаты показали, что модель LSTM работает лучше, чем модель RNN.В этом исследовании для оценки производительности языковых моделей использовался корпус Java-проектов.

    В [4] авторы предложили новый метод коррекции исходного кода на основе LSTM, который использует подобие сегментов. В частности, в исследовании использовалась модель «последовательность-последовательность» (seq2seq) для процесса исправления исходного кода. Модель seq2seq — это подход машинного обучения, который очень эффективен для языковых моделей, таких как машинный переводчик, диалоговая модель, переводчик текста и подписи к изображениям.

    White et al. [7] предложили глубокую языковую модель программного обеспечения с использованием RNN. Полученные экспериментальные результаты с использованием корпуса Java показали, что предложенная языковая модель программного обеспечения превосходит традиционные модели, такие как n -грамма на основе кеша и стандартная n-грамма. Эта языковая модель программного обеспечения показала большие перспективы для использования в областях SE.

    В [9] авторы представили новую модель на основе Tree-LSTM, в которой каждая единица LSTM использовалась как дерево. Эта модель оценивает задачи прогнозирования семантического родства на основе пар предложений и классификации тональности.Между тем, в [10] авторы предложили метод классификации архивных исходных кодов по типу языка с использованием LSTM. Их экспериментальные результаты показали, что предложенный LSTM превзошел классификатор лингвистов, наивный байесовский (NB) классификатор и другие аналогичные сети.

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

    Педрони и Мейер [12] изучали соответствующий тип сообщений компилятора, которые могут помочь начинающим программистам идентифицировать ошибки исходного кода. И какие действия необходимы для сообщений об ошибках? В этом исследовании авторы экспериментально показали, что одни типы сообщений помогают начинающим программистам больше, чем другие.

    В [13] авторы представили модель исправления синтаксических ошибок исходного кода, написанную на языке программирования C.Эта модель, получившая название DeepFix, использует многослойную нейронную сеть от последовательности к последовательности в сочетании с механизмом внимания. Авторы также предложили обученную RNN, которая может предсказывать ошибку с помощью своего номера местоположения и исправлять ошибку с помощью подходящего токена. Полученные экспериментальные результаты показали, что из 6971 ошибки исходного кода этот подход полностью исправил около 27% и частично исправил около 19%.

    Rahman et al. [14] предложили языковую модель с использованием LSTM для исправления ошибок исходного кода.Предлагаемая модель представляет собой комбинированный механизм внимания с LSTM, который увеличивает эффективность стандартного LSTM. Результаты экспериментов показали, что модель значительно исправила ошибки в исходных кодах.

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

    Bahdanau et al. [16] предложили модель языкового перевода, в которой используется RNN. В частности, метод кодера-декодера используется в качестве переводчика, когда необходимо кодировать исходный текст в вектор фиксированной длины. Используя длину вектора, декодер может переводить предложения. Документ расширяет ограничения фиксированной длины, позволяя (мягкий) поиск из исходного предложения предсказывать целевое слово вместо использования жестких сегментов предложений исходного кода.

    Li et al.[17] указывает на ограничения языковых моделей нейронных сетей. Чтобы преодолеть эти проблемы, авторы предложили два новых подхода: LSTM с улучшенным механизмом внимания и сеть со смесью указателей. LSTM с улучшенным механизмом внимания используется для смягчения векторов фиксированного размера и улучшения способности запоминания, предоставляя различные способы обратного распространения градиентов. Напротив, сеть смеси указателей предсказывает слова вне словарного запаса (UoV), рассматривая локально повторяющиеся токены.В этом исследовании также предлагалось использовать метод завершения кода на основе абстрактного синтаксического дерева (AST-).

    Li et al. [18] представили модель прогнозирования дефектов исходного кода с использованием сверточной нейронной сети DP-CNN. Абстрактное синтаксическое дерево (AST) используется для преобразования исходного кода в векторы токенов. Используя карту встраивания слов, каждый вектор лексемы преобразуется в числовой вектор. CNN использовала числовой вектор для обучения. После этого модель CNN создает семантические и структурные особенности исходного кода.По сравнению с традиционными функциями прогнозирования дефектов DP-CNN улучшил производительность на 12% по сравнению с другими современными моделями и на 16% по сравнению с другими традиционными методами на основе функций.

    Dam et al. [19] представили модель глубокого обучения для прогнозирования дефектов программного обеспечения. Модель использует абстрактное синтаксическое дерево (AST), встроенное в сеть LSTM. Каждый узел структуры AST рассматривается как блок LSTM. Модель LSTM на основе глубокого дерева хранит синтаксическую и структурную информацию исходных кодов для точного прогнозирования.Стиль обучения древовидной модели LSTM не контролируется. Модель не очищает и не заменяет ошибочные слова, предсказывая правильные слова. Он используется для генерации вероятности ошибки из исходного кода; после этого; классификатор идентифицирует дефект исходного кода, используя значение вероятности.

    Pham et al. [20] использовали CNN в качестве языковой модели, основанной на нейронной сети прямого распространения (FFNN). Экспериментальные результаты показали, что производительность языковой модели CNN лучше, чем у обычной FFNN.Что касается рекуррентных моделей, языковая модель CNN работает хорошо по сравнению с RNN, но ниже современной модели LSTM.

    В [21] авторы предложили основанную на RNN модель для прогнозирования сбоев исходного кода. Есть два знакомых метода оценки, такие как площадь под кривой (AUC) и F1-меры, которые используются для измерения производительности. Предлагаемая модель RNN, основанная на внимании, повышает точность классификации исходного кода. Показатели AUC и F1 достигли на 7% и 14% большей точности, чем другие эталонные модели.

    Таким образом, в различных исследованиях было предложено множество методов и техник, в большинстве из которых использовались модели RNN, LSTM или сверточной нейронной сети (CNN) для манипулирования исходным кодом и других приложений. Очень сложно объяснить, какая предлагаемая исследовательская работа лучше других исследований. RNN работают сравнительно лучше, чем традиционные языковые модели, но RNN имеют ограниченную способность обрабатывать длинные входные данные исходного кода [7]. LSTM — это особый вид сети RNN, которая может запоминать более длинные последовательности исходного кода из-за своей необычной внутренней структуры и, таким образом, преодолевать недостатки RNN.Предлагаемая нами модель не похожа на другие модели. Предлагаемая нами сеть LSTM-AM дополнительно расширяет возможности стандартной сети LSTM до точки, в которой ее можно использовать для обнаружения и прогнозирования ошибок исходного кода, а также классификации исходного кода. Стандартная сеть LSTM использует только последнее скрытое состояние для прогнозирования. Напротив, наша сеть LSTM-AM может учитывать результаты всех предыдущих скрытых состояний при прогнозировании. Следовательно, это более многообещающий метод для использования при манипуляциях с исходным кодом, чем другие современные языковые модели.

    3. Обзор языковой модели и искусственных нейронных сетей
    3.1.
    N — Модель языка грамматики

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

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

    Таким образом, общее уравнение диаграммы n , используемой для условной вероятности следующей последовательности слов, имеет вид следующим образом:

    На практике максимальную вероятность можно оценить с помощью многих методов сглаживания [22], как показано в следующем уравнении:

    Перекрестная энтропия измеряется для проверки достоверности предсказания языковой модели [23].Низкие значения кросс-энтропии подразумевают лучшие языковые модели.

    3.2. Рекуррентная нейронная сеть (RNN)

    RNN — это вариант нейронной сети, который часто используется при обработке естественного языка, классификации, регрессии и т. Д. В традиционной нейронной сети входные данные обрабатываются через несколько скрытых слоев, а затем выводятся через выходной слой. . В случае последовательного зависимого ввода обычная нейронная сеть не может выдавать точные результаты. Например, в случае зависимого предложения « Rose is a beautiful flower » общая нейронная сеть принимает вход « Rose » для создания вывода, основанного исключительно на « Rose .Затем, когда рассматривается ввод слова « is », сеть не использует предыдущий результат « Rose ». Вместо этого он просто производит результат, используя слово « is ». Точно так же простая нейронная сеть использует другие слова « a », « красивый » и « цветок » для генерации результатов без учета предыдущего результата ввода. Для решения этой проблемы появилась RNN с внутренней памятью, которая сохраняет результаты предыдущих временных шагов.Простая структура RNN показана на рисунке 1.


    Математически RNN может быть представлена ​​с помощью уравнения (6). Текущее состояние RNN может быть выражено как где h t — текущее состояние, h t −1 — предыдущее состояние, x t — текущее состояние вход, — вес повторяющегося нейрона, и — вес входного нейрона.

    Уравнение (8) используется в качестве функции активации (tanh) RNN:

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

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

    3.2.1. Исчезновение и расхождение градиента

    В этом разделе мы обсуждаем проблемы исчезновения и расхождения градиента RNN. Кажется, что обучить сеть RNN просто, но это очень сложно из-за ее повторяющегося подключения. В случае прямого распространения мы умножаем все весовые метрики, и аналогичная процедура необходима для применения обратного распространения.Для обратного распространения сигнал может быть сильным или слабым, что вызывает взрыв и исчезновение. Исчезновение градиента создает сложную ситуацию для определения направления параметров модели для улучшения функции потерь. С другой стороны, взрывные градиенты делают условия обучения нестабильными. Обучение скрытой сети RNN проходит через разные временные шаги с использованием обратного распространения ошибки. Сумма отдельного градиента на каждом временном шаге равна суммарному градиенту ошибки. Ошибка может быть выражена путем рассмотрения общих временных шагов T в следующем уравнении:

    Теперь мы применяем цепное правило для вычисления общих градиентов ошибок:

    Этот член связан с произведением якобианов, как показано ниже. уравнение:

    Член в уравнении (12) оценивается уравнением (7).

    Теперь, с помощью разложения по собственным значениям на матрице Якоби, заданной формулой, мы получаем собственные значения, где и соответствующие собственные векторы равны. Если направление скрытого состояния перемещается в результате каких-либо изменений, тогда градиент будет. Из уравнения (14) произведение якобианов последовательностей скрытых состояний равно. Термин доминирующий легко представить. Таким образом, если наибольшее собственное значение равно, то градиент исчезнет и вызовет взрыв градиента [24]. Чтобы облегчить проблемы исчезновения или взрыва градиента, отсечение градиента, реверсирование ввода, инициализация идентичности, регуляризация веса, LSTM и т. Д.методы могут быть использованы.

    3.3. Сеть LSTM

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


    В самом начале обработка начинается со шлюза забывания, чтобы определить, какая информация должна быть отброшена (или сохранена) в состоянии ячейки. Забытые ворота в состоянии ячейки c t −1 могут быть выражены следующим уравнением (15), где h t −1 — это скрытое состояние, а x t это текущий ввод. Выход (0 или 1) затвора забывания производится через сигмовидную функцию.Если результат шлюза забывания равен 1, то мы сохраняем данные в состоянии ячейки; в противном случае мы отбрасываем данные.

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

    Теперь мы обновляем старое состояние ячейки c t −1 с помощью c t

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

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

    4. Предлагаемый подход

    Предлагаемая нами сеть LSTM-AM имеет эффективную архитектуру глубокого обучения, которая используется в качестве интеллектуальной модели поддержки для завершения исходного кода. Соответственно, мы обучили нашу модель, используя правильные исходные коды, а затем успешно использовали ее для обнаружения ошибок и предсказания правильных слов в ошибочных исходных кодах на основе обученного корпуса.Более того, предлагаемая модель позволяет классифицировать исходные коды по результатам прогнозов. Наша модель генерирует полный пакет обратной связи для каждого исходного кода после изучения, где учащиеся и профессионалы могут извлечь выгоду из модели. Рабочий процесс предложенной нами модели изображен на рисунке 3.


    4.1. Предлагаемая сеть LSTM-AM

    За прошедшие годы механизмы внимания были адаптированы к широкому спектру разнообразных задач [25–30], наиболее популярной и эффективной из которых является моделирование от последовательности к последовательности.Обычно при последовательном моделировании выходные данные последнего скрытого состояния используются в качестве вектора контекста для дальнейшего рассмотрения. Очень сложно обрабатывать длинные последовательные входные данные, используя модель «последовательность-последовательность» [31]. Механизм внимания позволяет отображать все ранее скрытые выходные данные состояния, включая последние выходные данные скрытого состояния, для получения наиболее релевантных и точных результатов.

    Помня об этом, мы включили механизм внимания в стандартный LSTM, чтобы сделать LSTM-AM, как показано на рисунке 4.Это усиливает способность нашей модели предсказывать более длинные последовательности исходного кода. Внимание обычно улучшает производительность модели языка и переводчика путем объединения всех выходных данных скрытого состояния с функцией softmax; иногда механизмы внимания работают как плотный слой. В последнее время механизмы внимания с большим успехом используются в задачах машинного перевода. Кроме того, иногда модели машинного переводчика необходимо сжимать целые входные последовательности в вектор меньшего размера, поэтому существует вероятность потери информации.Использование механизмов внимания устранило эту проблему. В предлагаемой нами модели механизм внимания объединен с LSTM. Хотя возможности стандартного LSTM для захвата зависимостей на большие расстояния намного превосходят возможности RNN. По-прежнему возникают проблемы, когда скрытое состояние должно нести все необходимые данные в векторе небольшого размера [31]. Введение механизмов внимания и их согласование с моделями нейронного языка, такими как LSTM, направлены на преодоление этих проблем [16].Механизм внимания предлагает нейронные языковые модели для извлечения и использования соответствующей информации во всех секретных состояниях прошлого. В результате улучшается удерживающая способность сети и предоставляются различные пути для обратного распространения градиентов. Более подробные математические иллюстрации механизмов внимания можно найти в [17].


    Для нашего механизма внимания мы взяли внешнюю память E для предыдущих скрытых состояний, которая обозначена. В предлагаемой модели использовался слой внимания с учетом h t и M t в момент времени t , веса внимания α t и вектора контекста c т .

    Чтобы предсказать следующее слово на временном шаге t , оценка основана не только на текущих скрытых состояниях h t , но и на векторе контекста c t . В этот момент основное внимание уделяется словарным пространствам, чтобы получить окончательную вероятность с помощью функции softmax. Здесь G t — вектор вывода. Где и — обучаемые матрицы проекции, — смещение и размер словаря / словаря.

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

    5. Сбор данных и описание проблемы

    Система онлайн-судьи (OJ) — это веб-среда программирования, которая компилирует и выполняет представленные исходные коды и возвращает решения на основе наборов тестовых данных. Система OJ — это открытая площадка для практики программирования и соревнований.Для проведения экспериментальных работ мы собрали исходный код системы AOJ [32, 33]. В настоящее время система AOJ без проблем работает на различных соревнованиях по программированию и академиях. По состоянию на май 2020 года около 75000 пользователей регулярно занимаются программированием на платформе AOJ с 2100 автономными наборами задач. Все наборы задач классифицируются на основе различных алгоритмов и разделов информатики [14]. В результате на платформе AOJ было заархивировано около 4,5 миллионов массивных исходных кодов решений, что способствует более тщательным исследованиям в области разработки программного обеспечения.Мы использовали все исходные коды из системы AOJ в целях обучения и тестирования, чтобы избежать угроз или трудностей в предлагаемой нами модели. Для обучения модели мы выбрали все правильные решения, написанные на языке C для трех задач, таких как наибольший общий делитель (GCD), сортировка вставкой (IS) и простые числа (PN). Всего существует 2285 правильных исходных кодов для проблемы ИБ, а общий показатель успешности решения составляет 35,16%. Общее количество правильных исходных кодов для задачи GCD составляет 1821, а общий показатель успешности решения составляет 49.86%. Рассматривая проблему GCD, мы видим, что есть два входа ( a и b ), заданные в строке, после которых будет выведен наибольший общий делитель a и b , как показано на рисунке 5 ( а).

    Напротив, общее количество правильных исходных кодов для проблемы PN составляет 1538, а общий коэффициент успешности решения составляет 30,8%. В описании проблемы PN первая строка содержит целое число N . Код должен подсчитать количество простых чисел в списке N элементов, как показано на рисунке 5 (b).

    5.1. Предварительная обработка данных и обучение

    Перед тем, как мы провели обучение, необработанные исходные коды были отфильтрованы путем удаления ненужных элементов. Для этого мы следовали процедуре, примененной к [14] для встраивания исходного кода и токенизации. Во-первых, мы удалили из кодов все нерелевантные элементы, такие как строки ( n ), комментарии и вкладки (\ t ). После этого все оставшиеся элементы кода были преобразованы в последовательности слов, где числа, функции, токены, ключевые слова, переменные, классы и символы обрабатывались как простые слова.Весь процесс преобразования кода называется токенизацией и созданием словаря. Затем каждое слово было закодировано с помощью идентификаторов, в которых были закодированы имена функций, ключевые слова, имена переменных и символы, как указано в таблице 1. Блок-схема процесса обучения и оценки нашей модели показана на рисунке 6.


    Слова ID

    Auto, break, char, case, const, continue, do, default, double, enum, else, exturn, for, float, goto , int, if, long, return, register, signed, short, sizeof, struct, static, switch, typedef, unsigned, union, volatile, void, в то время как 30–45
    A до Z (верхний ) и от a до z (нижний) 96–121 и 127–152
    0–9 80–89
    =, ∗, +, -, /,%, |, < ,>, (), {,}, [,] 94, 74, 75, 76, 79, 69, 155, 92, 93, 72, 73, 153, 155, 122, 124
    @, #, $,% , и 95, 67, 68, 69, 70
    ! (Не),? (вопрос), «(одинарная кавычка),« (двойная кавычка) ,.(точка) ,; (точка с запятой), 🙁 двойное двоеточие) ,, (запятая) 63, 64, 71, 66, 78, 90, 91, 76


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


    По завершении процесса внедрения и токенизации мы обучили нашу предложенную модель и другие связанные современные модели с правильными исходными кодами проблем IS, GCD и PN.Простой процесс обучения языковой модели на основе LSTM показан на рисунке 8.


    В конце процесса обучения следующим шагом является проверка производительности модели для задачи завершения исходного кода. Насколько точно он выявляет ошибки и прогнозирует исправления? Предлагаемая нами модель создавала вероятность для каждого слова. Мы считали, что слово будет кандидатом на ошибку, вероятность которого ниже 0,1 [14]. Кроме того, чтобы проверить функцию потерь модели, мы рассчитали кросс-энтропию для каждой эпохи на уровне softmax.Кросс-энтропия определяется как разница между фактическими и прогнозируемыми результатами. Softmax — это функция активации, которая создает вероятности. Обычно softmax используется как последний слой нейронных сетей. Диапазон вывода функции softmax составляет от 0 до 1. Полученный слой softmax x = [ x 1 , x 2 , x 3 , x 4 , …, x n ] и возвращает вероятность p = [ p 1 , p 2 , p 3 , p 4 , , p n ], как определено в следующем уравнении:

    Кросс-энтропия — это эффективный индикатор измерения производительности для вероятностной модели.Низкая кросс-энтропия указывает на хорошую модель.

    Простой пример процесса прогнозирования, используемого нашей моделью, показан на рисунке 9. Пример входной последовательности: {«=», «x», «+», «y»}; затем модель вычисляет следующее вероятное правильное слово на основе корпуса исходного кода. Наконец, слово с наибольшей вероятностью является победителем следующего предсказанного слова. На основе входной последовательности в приведенном выше примере правильное предсказанное слово — {«;»}.


    5.2. Гиперпараметры

    В настоящем исследовании мы определили несколько экспериментальных гиперпараметров, чтобы получить лучшие результаты.Чтобы избежать переобучения, в предлагаемой нами модели использовался коэффициент выпадения (0,3). Сеть LSTM была оптимизирована с использованием метода стохастической оптимизации Adam [34, 35]. Скорость обучения является важным фактором для обучения нейронной сети, потому что значение скорости обучения может контролировать скорость обучения модели. Сетевое обучение становится быстрее и медленнее на основе более высокого и более низкого значения скорости обучения, соответственно. В данной статье мы определяем скорость обучения l = 0.002, а веса сети во время обучения обновляются на значение l . — экспоненциальная скорость затухания для оценки первого момента, а оценка экспоненциальной скорости затухания для второго момента равна. Значения и равны 0,001 и 0,999 соответственно. Значение выбрано, чтобы избежать деления на ноль, которое есть. Мы обучили нашу сеть на 50, 100, 150 и 200 скрытых единиц. Каждый тип модели был назван со ссылкой на количество единиц, например, модель на 100 единиц и модель на 200 единиц.После обучения мы оценили способность предлагаемой нами техники LSTM-AM выбирать лучшее количество скрытых единиц из созданных моделей.

    6. Результаты экспериментов

    Предлагаемая нами модель интеллектуальной поддержки может быть полезна для завершения исходного кода. Кроме того, это общая модель, которая может быть адаптирована к любому исходному коду для обучения и тестирования модели. В предлагаемой нами модели мы определили минимальное значение вероятности, по которому модель может идентифицировать слова-кандидаты с ошибками на основе обучающего корпуса.Соответственно, мы случайным образом выбрали несколько неверных исходных кодов IS, GCD и PN и использовали их для оценки уровней производительности моделей. Здесь мы должны отметить, что вся наша исследовательская работа и обучение языковой модели проводились на персональном компьютере с центральным процессором (ЦП) Intel® Core ™ i7-5600U с тактовой частотой 2,60 ГГц и 8 ГБ ОЗУ в 64-разрядной ОС Windows 10. Операционная система.

    6.1. Выбор скрытых единиц и измерение кросс-энтропии

    Мы использовали несколько скрытых единиц, таких как 50, 100, 150 и 200, для обучения предлагаемых нами LSTM-AM и других современных моделей.При обучении правильные исходные коды задач IS, GCD и PN используются отдельно, а все исходные коды IS, GCD и PN используются вместе. Количество исходных кодов для каждого типа проблем приведено в таблице 2.



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

    Наибольший общий делитель ) 964
    Сортировка вставкой (IS) 1518
    Простые числа (PN) 972

    наше предлагаемое состояние -современные модели с использованием правильных исходных кодов.В таблице 3 представлена ​​кросс-энтропия за 30 эпох во время обучения с использованием исходных кодов PN. Моделям из 50, 100, 150 и 200 единиц потребовалось в общей сложности 11483, 20909, 38043 и 59065 секунд для обучения модели LSTM-AM с использованием задачи PN соответственно.


    Модель Единицы (нейроны)
    50 100 150 200
    20 3,90 2,87 2,23
    LSTM 4,75 3,31 2,37 2,02
    RNN
    RNN 908 908 908 9020 9 815 908 908 4,25 9020 908 4,720 908

    В таблицах 4 и 5 представлена ​​кросс-энтропия различных моделей во время обучения с использованием исходных кодов GCD и IS соответственно. Для моделей с 50, 100, 150 и 200 единиц потребовалось в общей сложности 19005, 24110, 24273 и 30420 секунд, чтобы обучить модель LSTM-AM с помощью задачи GCD, соответственно, а для задачи IS она в сумме заняло 39643, 62756, 80100 и 100803 секунды соответственно.Напротив, другие модели, такие как LSTM и RNN, занимали относительно меньше времени на обучение.


    Модель Ед. 1,80 1,75 1,30
    LSTM 2,56 1,91 1.80 1,39
    RNN 5,11 4,36 3,50 3,23

    многие из них содержат от 500 до 1000 строк исходного кода или больше.У всех есть одна общая черта: при написании программы многочисленные переменные и функции могут быть ранее объявлены во многих строках. Следовательно, необходим механизм внимания, чтобы фиксировать долгосрочные зависимости исходного кода, а также правильно оценивать ошибки исходного кода. Наши экспериментальные результаты показали, что модель LSTM-AM была намного более успешной для более длинного последовательного исходного кода, чем стандартная модель LSTM, как показано на рисунке 17.


    Кроме того, некоторые синтаксические и логические ошибки в исходных кодах не могут быть устранены. определены традиционными компиляторами.В таких случаях предлагаемая нами языковая модель на основе LSTM-AM может предоставить значимые ответы учащимся и специалистам, которые могут быть использованы для отладки исходного кода и процесса рефакторинга. Можно ожидать, что это сэкономит время при работе по обнаружению ошибок в тысячах строк исходного кода, а также ограничит область, в которой необходимо искать ошибки. Кроме того, использование этой интеллектуальной модели поддержки может помочь учащимся и профессионалам легче находить логические и другие критические ошибки в их исходных кодах.Более того, точность классификации предлагаемой нами модели намного лучше, чем у других современных моделей. Средние показатели точности, отзывчивости и измерения F модели LSTM-AM составляют 97%, 96% и 96% соответственно, что превосходит другие современные модели.

    8. Заключение

    В настоящем исследовании мы предложили модель на основе ИИ, чтобы помочь студентам и программистам в завершении исходного кода. Ожидается, что предлагаемая нами модель будет эффективна в предоставлении комплексных решений для учащихся, изучающих программирование, и профессионалов в области SE.Экспериментальные результаты, полученные в этом исследовании, показывают, что точность обнаружения и прогнозирования ошибок с использованием предлагаемой нами модели LSTM-AM составляет примерно 62%, тогда как точность стандартной модели LSTM составляет примерно 31%. Кроме того, наш подход предоставляет номера местоположений для прогнозируемых ошибок, что эффективно ограничивает область, в которой необходимо искать ошибки, тем самым сокращая время, необходимое для исправления больших последовательностей исходного кода. Кроме того, наша модель генерирует вероятные исправляющие слова для каждого места ошибки и обнаруживает логические и другие ошибки, которые не могут быть распознаны обычными компиляторами.Кроме того, модель LSTM-AM показывает большие успехи в классификации исходного кода, чем другие современные модели. В результате он особенно подходит для приложений с длинными последовательностями исходного кода и, как ожидается, внесет значительный вклад в процесс отладки и рефакторинга исходного кода. Несмотря на вышеупомянутые преимущества, предлагаемая нами модель также имеет некоторые ограничения. Например, обнаружение ошибок и прогнозы не всегда идеальны, а модель иногда не может понять семантическое значение исходного кода из-за неправильного обнаружения и прогнозов, которые были произведены.Таким образом, в нашей будущей работе будет использоваться двунаправленная нейронная сеть LSTM для улучшения этой интеллектуальной модели поддержки для завершения исходного кода.

    Доступность данных

    Мы приобрели все исходные коды для обучения и тестирования из системы AOJ. Доступ к ресурсам осуществляется через API со следующих веб-сайтов: https://onlinejudge.u-aizu.ac.jp/ и http://developers.u-aizu.ac.jp/index.

    Конфликт интересов

    Авторы заявляют об отсутствии конфликта интересов.

    Благодарности

    Это исследование финансировалось JSPS KAKENHI (грант № 19K12252).

    Объяснение первой нейронной сети для начинающих (с кодом) | Автор: Артур Арнкс

    Создание собственной простой нейронной сети

    Давайте создадим нейронную сеть с нуля с помощью Python (3.x в примере ниже).

      import  numpy, random, os 
    lr = 1 #learning rate
    bias = 1 #value of bias
    weights = [random.random (), random.random (), random.random ()] # весов, сгенерированных в списке (всего 3 веса для 2 нейронов и смещения)

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

      def  Perceptron (input1, input2, output): 
    outputP = input1 * weights [0] + input2 * weights [1] + bias * weights [2]
    if outputP> 0: # функция активации (здесь Хевисайда)
    outputP = 1
    else :
    outputP = 0
    error = output - outputP
    weights [0] + = error * input1 * lr
    weights [1] + = error * input2 * lr
    weights [2]). + = error * bias * lr

    Здесь мы создаем функцию, которая определяет работу выходного нейрона.Он принимает 3 параметра (2 значения нейронов и ожидаемый результат). «OutputP» — это переменная, соответствующая выходу, выдаваемому перцептроном. Затем мы вычисляем ошибку, используемую для изменения веса каждого соединения с выходным нейроном сразу после этого.

      для  i в диапазоне (50): 
    Персептрон (1,1,1) # Истинный или истинный
    Персептрон (1,0,1) # Истинный или ложный
    Персептрон (0,1,1) # Ложь или true
    Perceptron (0,0,0) #False or false

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

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

     x = int (input ()) 
    y = int (input ())
    outputP = x * weights [0] + y * weights [1] + bias * weights [2]
    если outputP> 0: # функция активации
    outputP = 1
    else :
    outputP = 0
    print (x, "или", y, "is:", outputP)

    Наконец, мы можем попросить пользователя ввести значения чтобы проверить, работает ли перцептрон. Это этап тестирования.

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

     outputP = 1 / (1 + numpy.					
    		
    		
    	
    
    				
    
    				
    

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    2024  Mississauga.ru   Авторские права защищены.
    50 100 150 200

    LSTM-AM 3,12 1,55 1.40 1,27
    LSTM 3,26 1,63 1,48 1,26
    RNN 4,99 3,78 908 908 908 908

    Чтобы оценить эффективность предложенной модели, была рассчитана эпохальная кросс-энтропия во время периодов обучения с использованием модели из 200 единиц, которая изображена на рисунке 10.

    Как упоминалось выше, эффективность модели сильно зависит от значения кросс-энтропии. -энтропия.Во время обучения модель из 200 единиц давала самую низкую кросс-энтропию при использовании каждого типа набора задач. Кросс-энтропия модели из 200 единиц с использованием задач IS, PN и GCD показана на рисунке 11.


    Мы стремились найти наиболее подходящие скрытые единицы для нашей сети LSTM-AM и других состояний. современные модели. В связи с этим мы собрали все исходные коды (около 3442) для обучения наших предлагаемых и других современных моделей. Кросс-энтропии и общее время записываются в последнюю эпоху всех моделей, как показано в таблице 6.Кросс-энтропия модели с 200 единицами ниже, чем у других моделей.

    908

    Модель Единицы (нейроны)
    50 100 150 200
    908
    908 2,99 2,75 2,17
    LSTM 3,89 3,26 2,50 2.31
    RNN 5,11 4,36 3,87 3,53

    На основании вышеупомянутого аспекта, модель обеспечивает наилучшие результаты его кросс-энтропия — самое низкое значение среди всех единиц; Таким образом, мы выбрали модель из 200 единиц для сети LSTM-AM и других современных сетей.

    6.2. Обнаружение и прогнозирование ошибок

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

    Ошибочная последовательность исходного кода, оцененная стандартной сетью LSTM, показана на рисунке 12.Здесь можно увидеть, что ошибки были обнаружены в строках 2, 6, 15 и 16. В строке 2 слово « a » в функции « gcd » было обнаружено как кандидат на ошибку, после чего правильное слово было предсказано как «)» с вероятностью 0,62435395. Модель решила, что функция « gcd » может быть без аргументов, вместо слова « a » было предсказано слово «)». В строке 6 слово ошибки — «if», а предсказанное слово — «else» с вероятностью 0.5808078. Кроме того, в строке 15 предсказанное слово представляет собой «пробел» вместо «двойных кавычек». Наконец, в строке 16 модель обнаружила « c » как объект ошибки и предложила с высокой степенью вероятности заменить его словом « b ». Слово « c » не имеет значения в контексте программы; можно подтвердить, что стандартная модель LSTM успешно обнаружила кандидатов на ошибки, показанные на рисунке 12, как указано в таблице 7.



    Ошибочные слова Вероятность ошибочного слова Местоположение Прогнозируемые слова Вероятность

    A 0.000496462 2 ) 0. 6243539
    Если 0,014852316 6 иначе 0,5808078
    0,08

    c

    8,5894303 e −10 16 b 0,9261215

    исходный код был оценен таким же исходным кодом. , как показано на рисунке 13.Расположение ошибок находится в строках 2, 15 и 16. Слово « a » в функции « gcd » было обнаружено как кандидат на ошибку, и было предложено предсказанное слово «)». В строке 15 слово «двойные кавычки» было идентифицировано как ошибка, и было предложено предсказанное слово «пробел». Слово « c » в строке 16 было распознано как ошибка, и соответствующее предложенное предсказанное слово было «b» с вероятностью 0,9863272, как показано в таблице 8.



    Ошибочные слова Вероятность ошибочного слова Местоположение Предсказанные слова Вероятность

    A 0.000309510 2 ) 0. 5722154
    0. 045484796 15 место 0. 7051629

    27

    27 908

    16 b 0,9863272

    Другой интересный ошибочный исходный код, который существует в некоторых логических ошибках, был оценен стандартной сетью LSTM, как показано на рисунке 14.Все обнаруженные ошибочные слова и соответствующие им предсказанные исправления на Рисунке 14 перечислены в Таблице 9.


    Прогнозируемые слова 908
    910 908 908 908 908 908 сетью LSTM-AM, как показано на рисунке 15. Подробные описания ошибок на рисунке 15 перечислены в таблице 10, где можно увидеть, что сеть LSTM-AM обнаружила все потенциальные ошибки, включая истинные логические ошибки, успешно.



    Ошибочные слова Вероятность ошибочного слова Местоположение

    для 0,049593348 31 i 0,1376049
    rst 0.02372846 38 rmd 0,6147145
    } 0,0470908 39 возврат 0,95013565
    8

    8
    9 908 9015 908 908

    Ошибочные слова Вероятность ошибочного слова Местоположение Прогнозируемое слово Вероятность
    x 0,9269715
    = 0,012642788 13 b 0.9468921
    rmd 0,03553478 23 } 0,6362259
    для 0,037460152 31 0,037460152 31 i 0,8597483

    6.3. Классификация исходных кодов

    Мы оценили предлагаемые нами LSTM-AM и другие эталонные модели, используя как чистые, так и ошибочные исходные коды.Для обширных экспериментов мы выбрали несколько эталонных моделей для сравнения результатов классификации, таких как (i) метод случайного леса (RF) [36], (ii) метод случайного леса (RF), обученный с секретными атрибутами с помощью ограниченной машины Больцмана (RBM) [37 ], и (iii) метод случайного леса (RF), изученный с помощью секретных атрибутов Deep Belief Network (DBN) [38].

    Прецизионность, отзыв и F -мера выражаются уравнениями (23) — (25), соответственно, для проверки характеристик классификации: где это называется истинно положительным, случай означает, что дефектный исходный код классифицируется как ошибочный, и называется ложным срабатыванием; случай означает, что чистый исходный код классифицируется как ошибочный.Термин называется ложноотрицательным, где означает, что ошибочный исходный код классифицируется как чистый исходный код. F — мера называется средним гармоническим отзывом и точностью. Как правило, мы не можем одновременно достичь оптимальных результатов по отзыву и точности. Например, если все исходные коды классифицированы как дефектные, итоговая оценка отзыва будет 100%, тогда как оценка точности будет небольшой. Следовательно, измерение F — это компромисс между отзывом и точностью.Диапазон баллов по шкале F составляет от 1 до 0; более высокий балл означает лучшую модель классификации.

    В нормальных условиях предлагаемая нами языковая модель обнаруживает все возможные ошибки в исходных кодах, где все обнаруженные ошибки не являются истинными ошибками (TE). Итак, мы рассматривали только TE для процесса классификации. Ошибка называется TE, если прогнозируемая вероятность больше 0,90. Мы согласовали термин истинно положительный с нашей предложенной моделью, когда модель обнаруживает TE в ошибочных исходных кодах.Опять же, в случае термина «ложное срабатывание» обнаруживается по крайней мере один TE в правильных исходных кодах. Наконец, в ошибочном исходном коде обнаруживается термин «ложноотрицательный», а не «ни одного TE», что означает, что он классифицирует ошибочный исходный код как чистый код. Как упоминалось выше, все модели обучаются с использованием правильных исходных кодов и тестируются на 500 случайно выбранных исходных кодах из каждого набора задач (IS, GCD и PN). Результаты классификации приведены в таблицах 11–13 для исходных кодов IS, GCD и PN соответственно.


    Модели Precision ( P ) Отзыв ( R ) F -измерение
    908 0,99 0,97 0,97
    LSTM 0,90 0,88 0,88
    RNN 0,82 0,79
    0,8085 0,80 0,82
    RF 0,62 0,55 0,58
    RF + RBM 0,66 0,65 0,621 908 0,65 0,621 908 0,68

    908


    Модели Precision ( P 908)

    LSTM-AM 0.98 0,95 0,96
    LSTM 0,87 0,89 0,87
    RNN 0,80 0,815 0,81
    0,80 0,81
    908 908 908 908
    РФ 0,64 0,59 0,61
    РФ + RBM 0,70 0,63 0,66
    РФ + DBN 75 0,80 0,77

    900 В процессе классификации Показатели оценки LSTM-AM и других современных моделей показаны на рисунке 16. F — результаты измерения показывают, что классификационная характеристика предлагаемой нами модели лучше, чем у других методов.


    7. Обсуждение

    Чтобы оценить предложенную нами модель интеллектуальной поддержки, мы определили три показателя измерения производительности, такие как точность прогнозирования ошибок (EPA), точность обнаружения ошибок (EDA) и точность модели (MA), показанные в уравнениях ( 26) по (28). В частности, мы оценили предложенную нами модель и другие эталонные модели с помощью уравнения (28).

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

    В процессе оценки мы отбросили RNN и другие эталонные модели, потому что они получили высокие перекрестные энтропии, тогда как стандартные LSTM достигли очень низких перекрестных энтропий. Поэтому мы проверили как стандартные сети LSTM, так и LSTM-AM, используя несколько случайно выбранных ошибочных исходных кодов.На рисунке 12 и в таблице 7 представлены подробные сведения об обнаружении и прогнозировании ошибок с помощью стандартного LSTM. Стандартный LSTM обнаружил ошибки в строках 2, 6, 15 и 16 и предоставил соответствующие слова-кандидаты « a », «if», «двойные кавычки» и c соответственно. Предполагаемые правильные слова: «)», «else», «пробел» и « b ». Хотя эти результаты показывают, что стандартный LSTM обнаружил наиболее вероятные ошибочные слова и местоположения, не все возможные ошибки являются истинными ошибками (TE).В строке 2 модель обнаруживает « a » как кандидата на ошибку, предполагая, что « gcd » — это функция без аргументов. Затем, как следствие, он предсказывает закрывающую скобку «)» как правильное слово. Точно так же в строке 6 модель обнаружила «if» как слово-кандидат ошибки и предсказала «else» как соответствующее исправление. В этом случае модель рассчитала, что слово «if» начинается со строки 3 и заканчивается строкой 5, а слово после строки 5 должно быть «else». В результате стандартный LSTM предсказал слово «else» в строке 6 вместо слова «if.Однако оба прогноза ошибок в строках 2 и 6 были неверными, хотя и были гипотетически разумными. Следует отметить, что слово-кандидат на ошибку « c » в строке 16 является истинной ошибкой (TE), а предсказанное слово « b » является правильным. Результаты оценки с использованием стандартного LSTM для ошибочного исходного кода на рисунке 12 представлены в таблице 14.

    9015 908 0,5 908 15 908 0,5 RF + RBM

    Модели Precision ( Precision) -мера

    LSTM-AM 0,95 0,94 0,94
    LSTM 0,88 0.86 0,86
    RNN 0,76 0,79 0,77
    CNN 0,80 0,82 0,80
    0,63 0,62 0,62
    RF + DBN 0,65 0,66 0,65

    3 25, EPA = 25

    Индексы оценки Результаты (%) Описания
    EDA 25 TE = 1, TDE = 4
    EPA 25 TCW = 1, TPW = 4
    MA 25 A = 25

    На рисунке 13 модель LSTM-AM обнаружила в общей сложности три ошибки в строках 2, 15 и 16, с предсказанными соответствующими правильными словами «)», «пустое пространство». , »И« b »соответственно, как показано в Таблице 8.Результаты оценки с использованием LSTM-AM для ошибочного исходного кода на Рисунке 13 представлены в Таблице 15.



    Индексы оценки Результаты (%) Описания
    4
    EDA 33,33 TE = 1, TDE = 3
    EPA 33,33 TCW = 1, TPW = 3
    MA 33.33 EDA = 33,33, EPA = 33,33

    Для дальнейшей оценки производительности нашей предложенной модели мы затем взяли несколько более крупный и сложный ошибочный исходный код и проверили его, используя как стандартные сети LSTM и LSTM-AM, как показано на рисунках 14 и 15 соответственно. Ошибочный исходный код содержит логическую ошибку в строке 23. В этом исходном коде два ввода были взяты с клавиатуры как переменные « a » и « b ».Более высокое значение было присвоено переменной « x », а меньшее значение было присвоено переменной « y ». Первоначально переменная « x » считалась делимым, а переменная « y » была обозначена как делитель. Однако строка 23 была проверена, чтобы найти начальный наибольший общий делитель, используемый модульным арифметическим оператором, где переменная с малым значением « y » считалась дивидендом, а переменная с более высоким значением « x » считалась делитель.Следуя кодовой последовательности, правильная логика будет x % y . Основываясь на этом аспекте, сеть LSTM-AM правильно определила логическую ошибку, учитывая предыдущую последовательность исходного кода, тогда как стандартный LSTM не смог обнаружить логическую ошибку в строке 23. Результаты оценки для ошибочных исходных кодов на рисунках 14 и 15 следующие. перечислены в Таблице 16, где видно, что производительность сети LSTM-AM была даже лучше в случае длинных исходных кодов и сложных кодов с логическими или другими ошибками.

    15 15 L

    Модель EDA (%) EPA (%) MA (%)

    LSTM-AM 90 72 81

    В дополнение к вышеупомянутым оценкам исходного кода и примерам, выбранным с ошибками, мы оценили примерно 300 случайно выбранных исходных кодов. Модели LSTM и LSTM-AM и обнаружили, что их средние значения точности составили приблизительно 31% и 62% соответственно.Эти подробные статистические данные показаны в Таблице 17.

    908

    Название Модели
    LSTM LSTM-AM
    EDA EPA MA

    GCD 100 34,27 32,13 33,2 65815 59820.04 62,26
    PN 100 28 31 29,5 64,6 57,3 60,95
    IS 61 62,3
    MA 31,1 61,84