Методика организации практической работы «Создание и реализация компьютерной модели персептрона» в школьном курсе информатики
И.В. Левченко, Е.С. Левченко, Л.И. Карташова
В статье предложены методические рекомендации по организации практической работы по созданию и реализации компьютерной модели персептрона на языке программирования Python, направленной также и на закрепление учебного материала по применению однослойных нейронных сетей в распознавании образов.
Ключевые слова: методика обучения информатике в школе; искусственный интеллект; нейронная сеть; персептрон; язык программирования Python.
V. Levchenko, E.S. Levchenko, I. Kartashova
Methodic for Organization Practical Work «Development and Implementationof a Computer Model of the Perceptron» in School Informatic Course
The article offers methodological recommendations for organizing practical work on the creation and implementation of a computer model of the perceptron in the Python programming language and aimed at consolidating educational material on the use of single layer neural networks in pattern recognition.
Keywords: methodic of teaching informatic at school; Artificial Intelligence; neural network; perceptron; Python programming language.
В данной статье описана методика организации выполнения практической работы, посвященной разработке и реализации компьютерной модели персептрона и проводимой в рамках изучения школьниками основ искусственного интеллекта [13]. Знание учебного материала, который был освоен учащимися на занятиях по темам, связанным с моделированием нейронных сетей, изучением основ языка программирования Python, распознаванием образов интеллектуальными системами [8; 10], является необходимым условием для выполнения практической работы по созданию компьютерной модели персептрона, а также ее дальнейшей реализации [7].
Сначала рассмотрим подход к организации практической работы «Создание и реализация компьютерной модели персептрона» [5]. Практическую деятельность учащихся, связанную с созданием однослойной нейронной сети, целесообразно организовать на основе ранее изученных дидактических элементов курса информатики [3; 6], она же послужит и для закрепления учебного материала по применению нейросетей в распознавании образов.
Помимо этого, результаты выполнения данной практической работы целесообразно обсудить с учащимися с точки зрения возможностей использования интеллектуальных систем для решения самых разнообразных задач и перспектив дальнейшего развития технологий искусственного интеллекта и их применения [12]. Тем самым вы проведете повторение ранее изученного материала, но уже с учетом собственного опыта учащихся, их знаний и умений.
При организации практической деятельности учащихся важно следить за соблюдением санитарно-гигиенических норм, касающихся работы учащихся за компьютерами, уделять внимание физкультминуткам и упражнениям для глаз.
Данную практическую работу следует разделить на две части, каждая из которых может быть реализована как минимум в течение одного занятия. Выделяем структурные элементы работы: постановку задачи, разработку информационной модели, разработку алгоритма и реализацию его этапов в виде создания и выполнения программного кода [11]. Практическую работу предлагается выполнять с использованием системы программирования Python и другого свободно распространяемого программного обеспечения [1; 4; 9].
Цель занятий: закрепить знания и выработать умения по созданию прототипа персептрона.
Тип занятий: закрепление и развитие знаний и умений.
Место занятий в курсе: занятия (как минимум два) позволяют получить практический опыт по созданию систем распознавания естественного языка и являются завершающими в тематическом разделе.
Обсуждаемыми вопросами являются ключевые моменты ранее изученного материала тематического раздела.
Среди практических заданий присутствует выполнение как основных, так и дополнительных заданий.
Методические рекомендации
Первое, приступаем к постановке задачи. Необходимо совместно с учащимися сформулировать задачу или же предложить им готовый вариант постановки задачи. В обоих случаях необходимо удостовериться в том, что учащиеся задачу поняли, в условии задачи для них не осталось неясных моментов и они готовы приступить к работе над ней. Приведем пример постановки задачи: «Необходимо разработать компьютерную программу, которая на основе однослойной нейронной сети (персептрона) может распознавать букву О среди букв Б, Г, Е, Н, О, П, Р, С, Т».
Второе, после формулировки задачи, переходим к обсуждению условия задачи с учащимися. Для этого используем систему наводящих вопросов, отвечая на которые учащиеся уже точно смогут разобраться с условием задачи, выделить ее основные компоненты, такие как входящие данные, выходные данные и т. д. Все это позволит учащимся понять и принять задачу, которую необходимо решить, а учителю определить тех, кто задачу не понял и кому необходима дополнительная помощь.
Анализируя таким образом условие задачи, приходим к совместному с учащимися выводу о том, что в качестве входных данных предлагается 9 картинок, а именно 9 растровых изображений указанных в условии букв, а на выходе должно быть нахождение картинки с буквой О [2]. Обращаем внимание учащихся, что программа вычисляет значения весовых коэффициентов для персептрона с целью распознавания буквы О.
Обсуждаем, что на первом этапе не ставится задача обучить нейросеть, а надо лишь выполнить расчет суммарных значений входных сигналов нейрона для каждой предъявляемой буквы, и здесь имеют место два случая: либо весовые коэффициенты являются случайными, либо, наоборот, они правильно подобраны. Затем обращаем внимание, что полученные суммарные значения сравниваются с порогом чувствительности нейрона и на основании этого делается вывод о нахождении буквы О.
Также следует обсудить с учащимися, что на первом этапе не ставится задача разработать пользовательский графический интерфейс программы. Реализация разрабатываемой программы предполагается с использованием лишь интерфейса командной строки, то есть консольного взаимодействия с компьютером. Отличия графического и командного (или консольного) пользовательского интерфейсов должны быть известны учащимся из общеобразовательного курса информатики.
В дальнейшем данная задача может быть усложнена требованием по созданию пользовательского интерфейса. Такой интерфейс может быть либо изначально определен учителем, либо продуман и разработан учащимися полностью самостоятельно, но с обязательным наличием элементов, указанных на этапе постановки задачи, например таких: растровые изображения 9 букв, над которыми указаны суммы значений входных сигналов и ответ на вопрос задачи в виде слов True или False; таблицы весов; значение порога чувствительности нейрона; поле для ввода порядкового номера проверяемой буквы; сумма значений входных сигналов; ответ на вопрос задачи [11].
Третье, соблюдая логику проведения практической работы, в качестве следующего шага необходимо совместно с учащимися перейти к разработке информационной модели. С помощью системы наводящих вопросов учителя учащиеся приходят к выводу, что изображение каждой из предлагаемых 9 букв можно представить в виде растра 3 х 5 пикселей. Например, растровое чернобелое изображение буквы Б можно записать как последовательность нулей и единиц, где единица -- это пиксель черного цвета, ноль -- белого. В итоге получим 15 таких значений: [[1,1,1],[1,0,0],[1,1,1],[1,0,1],[1,1,1]].
Далее вместе с учащимися обсуждаем, что от каждого пикселя растрового изображения нейрон или получает сигнал (х = 1), или не получает его (х = 0). Вспоминаем, что каждая связь из имеющихся 15 (так называемые входы в нейрон) имеет свой весовой коэффициент (например, w = -1), и все эти коэффициенты хранятся в таблице межнейронных связей. Затем обращаем внимание, что искусственный нейрон суммирует значения входных сигналов х, которые умножены на весовые коэффициенты (значения весов) Wj. Другими словами, вычисления происходят следующим образом:
S = x1 • w1 + x2 • w12 + …+ x15 • w15.
Затем уточняем, что искусственный нейрон сравнивает результат суммарного значения входных сигналов S с порогом чувствительности 9 и вырабатывает значение выходного сигнала у. Значение сигнала y может быть равно 1 (или, другими словами, сигнал есть) в том случае, когда S больше либо равно 9, и равно 0 (сигнала нет) в том случае, когда S меньше 9.
Далее сообщаем, что перед нейрокомпьютером стоит задача выдавать значение у = 1 (True) при предъявлении карточки с изображением буквы О и выдавать значение у = 0 (False) для любой другой из восьми возможных букв. Предлагаем сначала весовые коэффициенты Wj задать датчиком случайных чисел в диапазоне [-1, 1], а порог чувствительности 9 установить принудительно (например, 10). Обращаем внимание, что порог чувствительности выбирается с учетом необходимой точности работы нейрона и допустимой длительности его обучения. Далее обучение нейрокомпьютера идет с помощью изменений весовых коэффициентов (значения весов) Wj.
Рассматриваем пример предъявления карточки с буквой Б на входе персептрона. Если случайно выходной сигнал y оказался равен нулю (суммарное значение входных сигналов не превысило порог чувствительности нейрона), то это означает, что корректировать весовой коэффициент не надо, поскольку реакция персептрона верная (на карточке не буква О). А если случайно выходной сигнал y оказался равен единице (на карточке буква О), что неправильно, то следует уменьшить («наказать») весовые коэффициенты тех активных входов (например, х2 = 1), которые способствовали возбуждению нейрона (w2 и др.).
В качестве другого примера рассматриваем предъявление карточки с буквой О на входе персептрона. Если случайно выходной сигнал y оказался равен единице (суммарное значение входных сигналов превысило порог чувствительности нейрона), то это означает, что корректировать весовой коэффициент не надо, поскольку реакция персептрона верная (на карточке буква О). А если случайно выходной сигнал y оказался равен нулю, а это означает, что на карточке не буква О, что неправильно, то следует увеличить («поощрить») весовые коэффициенты тех активных входов (например, х2 = 1), которые способствовали возбуждению нейрона (W2 и др.).
Можно предложить учащимся самостоятельно объяснить обучение персептрона распознаванию буквы О с использованием других букв по аналогии с уже рассмотренной буквой Б. Для упрощения взаимодействия с программой предлагаем учащимся записать блоки, позволяющие вывести на экран изображения предъявляемых картинок, таблицы весов (исходные и текущие значения) межнейронных связей.
Четвертое, переходим к разработке алгоритма на языке программирования Python. Обращаем внимание учащихся, что код программы надо будет поэтапно пополнять, сохранять и запускать на исполнение, каждый раз верифицируя результат.
Первый этап -- это запуск среды разработки и создание файла persl, что делается с помощью команды меню (File /New File). Поскольку предполагается, что значения таблицы исходных весов межнейронных связей будут заполняться случайным образом, то потребуется функция генерации случайных чисел. Для этого будем использовать функцию из внешней библиотеки random, которая подключается с помощью инструкции import random.
Второй этап связан с формированием и выводом на экран изображений 9 отдельных букв. Каждая картинка с буквой будет представлена в виде списка, состоящего, в свою очередь, из вложенных списков. Каждый вложенный список -- это отдельная строка из 3 элементов. Для каждой картинки будет 5 таких строк.
Затем вспоминаем с учащимися формат записи списка (т е. упорядоченной последовательности) на языке программирования Python и особенности записи вложенных списков (что аналогично многомерным массивам). Например, первая буква в списке -- буква Б -- будет записана следующим образом: one = [[1,1,1],[1,0,0],[1,1,1],[1,0,1],[1,1,1]]
Таким же образом следует представить и остальные картинки с буквами. Обращаем внимание учащихся, что необходимо сохранить фрагмент кода программы в файле, имя которого уже задано.
Предлагаем вывод изображения отдельной картинки выполнить с помощью функции pr_number (N). Вспоминаем, что отдельные части программы, выполняемые больше одного раза, на языке Python оформляются в виде функции, определение которой начинается со служебного слова def, затем записывается имя функции и в круглых скобках указываются формальные параметры, а заканчивается запись двоеточием. В последующих строках записываются инструкции функции с обязательным отступом в 4 пробела в каждой строке. Вызов функции осуществляется по ее имени с указанием фактических параметров в круглых скобках.
Обсуждаем с учащимися, что функция pr_number (N) перебирает каждый элемент отдельной картинки по строкам и столбцам (5 строк и 3 столбца) в двух вложенных инструкциях for (т. е. циклах с параметром), и в зависимости от записанного значения в отдельном элементе списка N (первый из списка параметров функции) либо рисуется символ «*», либо нет. Обращаем внимание учащихся, что в текст фрагмента программы для лучшего его понимания включены комментарии, начинающиеся с символа # (шарп).