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

Пороговый логический блок

Пороговая логическая единица (TLU) — это базовая форма модели машинного обучения, состоящая из одной единицы ввода (и соответствующих весовых коэффициентов) и функции активации. Обратите внимание, что TLU — это самая базовая форма ИИ-нейрона/вычислительного блока, знание которого заложит основу для сложных тем в машинном обучении и глубоком обучении. TLU основан на имитации функциональности биологического нейрона на высоком уровне. Типичный нейрон получает множество сигналов от афферентных нейронов, каждый из которых связан с весом. Взвешенные входы модулируются в принимающем нейроне (эфферентном), и нейрон отвечает соответствующим образом — срабатывает/вырабатывает импульс (1) или не срабатывает/нет импульса (0). Это достигается в ВПУ с помощью функции активации, которая использует активацию a в качестве входных данных для создания прогноза y`. Определяется пороговое значение θ, и модель выдает выходные данные, если порог превышен, в противном случае никаких выходных данных.

В ВПУ каждый вход xᵢ связан с весом wᵢ, в котором сумма взвешенных входы (произведения входного веса xᵢ × wᵢ) вычисляются для определения активации a: a = ∑ᴺᵢ₌₁ xᵢ × wᵢ . На рисунке ниже показана простая архитектура TLU.

В то время как входные данные остаются неизменными, веса инициализируются случайным образом и корректируются с помощью метода обучения. Для TLU процесс обучения основан на паре примеров xᵢ,yᵢ, соответствующих произвольной точке данных xᵢи ее классу yᵢ. Эта форма обучения называется обучение под наблюдением, поскольку для управления процессом обучения используются как экземпляр данных, так и цель. Другими формами обучения, о которых я не буду здесь подробно останавливаться, являются неконтролируемое (использует входные данные для вывода соответствующих кластеров или категорий) и подкрепление (мотивирует и вознаграждает модель за правильную работу). предсказание, следовательно, модель нацелена на максимизацию вознаграждения). Говорят, что модель учится, может ли она правильно классифицировать ранее невидимую точку данных. Окончательный результат или прогноз основан на сумме взвешенных входных данных: y` = 1 if a ≥ θ otherwise y` = 0.

Регулировка весов в ВПУ

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

Порог ВПУ инициализируется как скалярная величина, которая используется в качестве базовой линии или погрешности, т. е. базовой линии, которую нужно достичь, прежде чем сработает нейрон. Для единообразия порог рассматривается как вес с постоянным входным значением -1, таким образом, что xᵢ×wᵢ> θ преобразуется и интегрируется в основной поток входного веса (xᵢ×wᵢ+(-1)×θ=0) для обучения. Следовательно, правило обучения определяется и многократно применяется до тех пор, пока не будет получена правильная настройка вектора весов. Корректировка вектора весов является функцией выходных данных данного экземпляра. На этой основе настраиваются параметры — либо увеличиваются, либо уменьшаются в соответствии с правилом обучения. Для каждой тренировочной эпохи или режима в вес вносятся незначительные изменения. Хорошо обученная модель должна уметь правильно классифицировать новые примеры.

Некоторые технические описания

При расширенном пороге действие ВПУ является либо положительным, либо отрицательным, определяемым как: w⋅x ≥ 0 → y = 1 or w⋅x < 0 → y = 0. Поскольку входной вектор x не изменяется в процессе обучения (остается неизменным), корректируется только вектор весов w, чтобы правильно совпадать с входным вектором. Используя скорость обучения α (0<α<1) для управления процессом, формируется новый вектор w`, который ближе к входному вектору x. Согласно решающему правилу корректировка веса может быть основана на добавлении или вычитании вектора веса; поскольку оба варианта вероятны, вместо них используется правило обучения, объединяющее оба варианта. Таким образом, w` = w + αx или w` = w — αx приводит к w` = w + α(t-y')x, где t-y используется для определения направления регулировки (увеличение или уменьшение). В качестве альтернативы отношение может быть выражено несколькими способами:

  1. С точки зрения изменения вектора весов: δw = w`- w but w` = w + α(t-y)x , and δw = α(t-y)x
  2. Или с точки зрения компонентов вектора весов: δwᵢ = α(tᵢ-yᵢ)xᵢ где i = 1 to n+1

Реализация ВПУ

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

  1. Определите входы и соответствующее представление
  2. Определить свободные параметры в задаче
  3. Укажите правило обучения
  4. Настройте свободные параметры для оптимизации
  5. Оценить модель

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

Если два класса векторов X, Y линейно разделимы, то применение алгоритма обучения персептрона в конечном итоге приведет к весовому вектору w₀, такому что w₀определяет ВПУ, чья гиперплоскость решения разделите X и Y — Gurney (1997), стр. 43.

repeat
 for each training vector pair (x,t)
   evaluate the output y when x is input to the TLU
   if y ≠ t then
      form a new weight vector w’ according to the learning rule
   else
    do nothing
   end if
 end for
until y = t for all vectors

Базовый Python class для реализации TLU:

#import relevant package(s)
import numpy as np
class TLU(object):
    #initialise the parameter(s) for class operationalisation
    def __init__(self, input_size):
        self.weights = np.zeros(input_size+1)
    
    def activate_tlu(self, x):
        return 1 if x>= 0 else 0    
   
    def predict_tlu(self, row):
        # this predicts individual row in a given dataset
        xw = np.array(row).dot(self.weights)    
        a = self.activate_tlu(xw)
        return a       
        
    def train_tlu(self, data, targets, epochs, lrate):
        #training to identify the right setting for the weights
        for epoch in range(epochs):
            for row, t in zip(data, targets):
                row = np.insert(row, 0,-1) #inserts the bias
                pred = self.predict_tlu(row)
                error = t - pred
                # adjust the weights vector ...
                if pred != t:
                    for r in range(len(self.weights)):
                        self.weights[r] = self.weights[r] +   (lrate*error*row[r])
                else:
                    continue
        return self.weights 
        
    def __str__(self):
        return('TLU Iteration!\n')

Создайте экземпляр class object для обучения и прогнозирования:

def tlu_pred(model,data,targets,epochs, lrate=0.2,toPrint=True):
    adj_w = model.train_tlu(data, targets, epochs, lrate) 
    if toPrint:
        print(model)
    return adj_w

Набор данных. Независимо от решаемой задачи входные данные необходимо преобразовать в числовые (обычно вещественные или двоичные значения). Рассмотрим основные входные векторы: x₁=[0011] и x₂=[0101]. Бесплатным параметром для поиска является вектор весов, который случайным образом инициализируется для запуска обучения.

# Logical AND Data:
andData = np.array([[0,0],[0,1],[1,0],[1,1]])
andTargets = np.array([0,0,0,1])
# Logical OR Data:
orData = np.array([[0,0],[0,1],[1,0],[1,1]])
orTargets = np.array([0,1,1,1])

Создание экземпляра класса:

model = TLU(input_size= 2)# class instantiation ...
#AND Data:
tlu_prediction(model, andData, andTargets, epochs=11,lrate=0.3)
#OR Data:
tlu_prediction(model, orData, orTargets, epochs=11,lrate=0.3)

Примеры выходных данных с использованием AND data:

TLU Iteration!

Main Targets:  [0 0 0 1] 

Main Inputs:  [[0 0]
 [0 1]
 [1 0]
 [1 1]] 

Adjusted weights:  [0.9 0.6 0.3]

Используя OR data:

TLU Iteration!

Main Targets:  [0 1 1 1] 

Main Inputs:  [[0 0]
 [0 1]
 [1 0]
 [1 1]] 

Adjusted weights:  [0.6 0.6 0.6]

Заключение

Описание в этом посте предполагает правильные настройки весов для правильной классификации заданных линейно разделимых данных. В сложной сети корректировка весов является сложной задачей. Будет представлен итеративный процесс, который использует входные данные и начальный набор свободных параметров для обучения. Будущий пост будет основан на дельта-правиле, основном правиле обучения для многослойной сети. Пост вдохновлен Герни (1997).

Дополнительные ресурсы