Практическое руководство по глубокому обучению (2): линейная единица и градиентный спуск

глубокое обучение

Резюме

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

прошлый обзор

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

Что такое линейная единица

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

Для простоты мы можем установить функцию активации линейного блока как

Такой линейный элемент показан на рисунке ниже

Сравните перцептроны, о которых мы говорили ранее

После замены функции активации таким образом,Линейная единицавернетреальная стоимостьвместо0,1 Категория. Поэтому линейные единицы используются для решениявозвращениепроблема вместоКлассификацияпроблема.

Модели линейных элементов

когда мы говоримМодель, мы фактически говорим о предсказании выхода y из входа xалгоритм. Например, x может быть рабочим годом человека, y может быть его месячной зарплатой, мы можем использовать некоторый алгоритм для прогнозирования дохода человека на основе его рабочих лет. Например у:

функция называетсяПредположение, а w и b — егопараметр. Предположим, что параметр w = 1000 и параметр b = 500. Если человек проработал 5 лет, наша модель будет прогнозировать его месячную зарплату как

Вы можете сказать, что эта модель слишком ненадежна. Это так, потому что мы учитываем слишком мало факторов, включая только трудовые годы. Если вы учтете больше факторов, таких как отрасль, компания, ранг и т. д., прогноз может быть более надежным. Мы называем такую ​​информацию, как рабочие годы, отрасль, компания и ранг, какособенность. Для человека, который проработал в ИТ-индустрии 5 лет, работает в Baidu и имеет ранг T6, мы можем использовать такой вектор признаков, чтобы представить его x=(5,IT, Baidu, T6). Так как вход x становится вектором с четырьмя признаками, соответственно одного параметра w недостаточно, мы должны использовать 4 параметра, соответствующих каждому признаку. Таким образом, наша модель становится

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

Для удобства записи и вычисления можно положить равным b, и пусть оно соответствует признаку. Поскольку на самом деле он не существует, мы можем сделать его всегда равным 1. то есть

Вышеупомянутая формула тогда может быть записана как

Мы также можем записать приведенное выше уравнение в виде вектора

Такая модель называетсяЛинейная модель, потому что выход y является входной функциейЛинейная комбинация.

Контролируемое и неконтролируемое обучение

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

Машинное обучение имеет класс методов обучения, называемыхконтролируемое обучение, а это значит, что для обучения модели нам нужно предоставить такую ​​связку обучающих выборок: каждая обучающая выборка включает в себя как входной признак x, так и соответствующий выходной признак y (y также называетсяметка, ярлык). То есть мы хотим найти много людей, знаем и их характеристики (годы работы, отрасль...), и их доход. Мы используем такие образцы, чтобы научить модель видеть каждый вопрос, который мы задаем (входной признак x), и ответ на соответствующий вопрос (метка y). Когда модель увидит достаточно образцов, она может заключить некоторые из этих паттернов. Затем он может предсказать ответы на входные данные, которые он не видел.

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

Часто бывает очень мало обучающих выборок как с x, так и с y, и большинство выборок содержат только x. Например, в задачах распознавания речи в текст (STT) x — это речь, а y — это текст, соответствующий речи. Легко получить большое количество голосовых записей, но голос сегментирован и сегментирован.вызыватьСоответствующий текст — очень трудоемкая вещь. В этом случае, чтобы восполнить недостаток меченых образцов, мы можем использоватьНеконтролируемые методы обучениясначала сделай что-нибудькластеризация, пусть модель суммирует, какие слоги похожи, а затем использует небольшое количество размеченных обучающих выборок, чтобы сообщить модели, что некоторые слоги соответствуют тексту. Таким образом, модель может сопоставить похожие слоги с соответствующим текстом, чтобы завершить обучение модели.

Целевая функция для линейных единиц

А пока давайте просто рассмотримконтролируемое обучение.

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

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

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

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

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

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

в

(Уравнение 2), представляет i-ю обучающую выборкуособенность, представляющий i-ю выборкуотметка, мы также можем использоватькортежозначает iОбучающие образцы. является моделью для i-го образцаПредполагаемая стоимость.

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

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

Алгоритм оптимизации градиентного спуска

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

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

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

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

Согласно приведенному выше обсуждению, мы можем написать формулу алгоритма градиентного спуска

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

Для целевой функции, указанной в предыдущем разделе (уравнение 2)

Алгоритм градиентного спуска можно записать как

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

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

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

Поэтому правила изменения параметров для линейных элементов заканчиваются так

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

Следует отметить, что если каждая выборка имеет M признаков, то в приведенной выше формуле все M+1-мерные векторы (поскольку мы добавили фиктивный признак, который всегда равен 1 для ссылки на предыдущее содержимое), носкаляр. Выраженное в математической записи высокого уровня, это

Чтобы вам было понятно, о чем я говорю, я выблевал кровью и написал следующее пояснение (утомительно писать такую ​​формулу). Потому что размерность М+1Вектор столбца, поэтому (уравнение 3) можно записать как

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

вывод

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

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

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

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

Мы знаем, что y — константа, которая не имеет ничего общего с w, но давайте получим вывод в соответствии с правилом вывода по цепочке (кажется, это называется правилом вывода составной функции, когда я пойду в колледж)

Мы вычисляем две частные производные в правой части приведенного выше уравнения соответственно.

Подставляя, находим, что частная производная внутри равна

Замени наконец, получи

Пока все готово.

Стохастический градиентный спуск (SGD)

Если мы обучаем модель в соответствии с (уравнением 3), то нам нужно пройти все выборки в обучающих данных для каждой итерации обновления w, и мы называем этот алгоритм именемПакетный градиентный спуск. Если наша выборка очень велика, например, от миллионов до сотен миллионов, вычислительная нагрузка чрезвычайно велика. Поэтому практичным алгоритмом является алгоритм SGD. В алгоритме SGD вычисляется только одна выборка для каждой итерации обновления w. Таким образом, для обучающих данных с миллионами выборок один обход будет обновлять w миллионы раз, что значительно повышает эффективность. Из-за шума и случайности выборок каждое обновление w не обязательно происходит в сторону уменьшения E. Однако, несмотря на некоторую случайность, большое количество обновлений обычно происходит в направлении уменьшения E, поэтому они могут в конечном итоге сойтись в окрестности минимального значения. На приведенной ниже диаграмме показана разница между SGD и BGD.

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

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

Реализация линейных единиц

Пожалуйста, обратитесь к GitHub за полным кодом:Нажмите, чтобы просмотреть

Далее поиграем с кодом.

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

Результаты сравнения шокируют, оказывается, что модели и правила обучения у них одни и те же, за исключением функции активации f (в ​​приведенной выше таблице алгоритмом оптимизации линейного блока является алгоритм SGD). Затем нам просто нужно заменить функцию активации персептрона. Пожалуйста, обратитесь к предыдущей статье для кода персептронаПрактическое руководство по глубокому обучению (1): Персептрон, и здесь повторяться не будем. Дублирующийся код невыносим для программиста с хорошими привычками. Вы должны хранить свой код в репозитории (например, git).

Будет предыдущий постПрактическое руководство по глубокому обучению (1): Персептронсохраните код в файле perceptron.py, затем создайте новый файл linear_unit.py.

from perceptron import Perceptron
#定义激活函数f
f = lambda x: x
class LinearUnit(Perceptron):
    def __init__(self, input_num):
        '''初始化线性单元,设置输入参数的个数'''
        Perceptron.__init__(self, input_num, f)

Унаследовав от Perceptron, мы реализовали линейный блок всего в нескольких строках кода. Это еще раз демонстрирует мощь парадигмы объектно-ориентированного программирования.

Далее, давайте проверим это на простых данных.

def get_training_dataset():
    '''
    捏造5个人的收入数据
    '''
    # 构建训练数据
    # 输入向量列表,每一项是工作年限
    input_vecs = [[5], [3], [8], [1.4], [10.1]]
    # 期望的输出列表,月薪,注意要与输入一一对应
    labels = [5500, 2300, 7600, 1800, 11400]
    return input_vecs, labels    
def train_linear_unit():
    '''
    使用数据训练线性单元
    '''
    # 创建感知器,输入参数的特征数为1(工作年限)
    lu = LinearUnit(1)
    # 训练,迭代10轮, 学习速率为0.01
    input_vecs, labels = get_training_dataset()
    lu.train(input_vecs, labels, 10, 0.01)
    #返回训练好的线性单元
    return lu
if __name__ == '__main__': 
    '''训练线性单元'''
    linear_unit = train_linear_unit()
    # 打印训练获得的权重
    print(linear_unit)
    # 测试
    print('Work 3.4 years, monthly salary = %.2f' % linear_unit.predict([3.4]))
    print('Work 15 years, monthly salary = %.2f' % linear_unit.predict([15]))
    print('Work 1.5 years, monthly salary = %.2f' % linear_unit.predict([1.5]))
    print('Work 6.3 years, monthly salary = %.2f' % linear_unit.predict([6.3]))

Результат работы программы следующий

Подогнанная прямая выглядит следующим образом

резюме

На самом деле алгоритм машинного обучения состоит всего из двух частей.

  • функция, которую модель предсказывает входные данные y на основе входных данных x
  • целевая функцияЗначение параметра, соответствующее минимальному (максимальному) значению целевой функции, является значением параметра модели.Оптимальное значение. Много раз мы можем получить только целевую функциюлокальное минимальное (максимальное) значение, поэтому можно получить только параметры моделилокальный оптимум.

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

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

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

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

использованная литература

  1. Том М. Митчелл, «Машинное обучение», перевод Цзэн Хуацзюня и др., Machinery Industry Press

PS: Эта статья - перепечатанная статья, и я чувствую, что она очень хорошо написана. Гу поделится ею с вами. Код оригинального автора python2 был изменен на код python3.

Оригинальная ссылка:Ууху.

Спасибо оригинальному автору!

Публичный аккаунт WeChatДелитесь технологиями и наслаждайтесь жизнью: введите «JackCui-AI» в общедоступный аккаунт WeChat, чтобы следить за преследователем, у которого проблемы в Интернете.Нравится _ 22_наградаПоделиться

Хотя он был сбит с толку и чувствовал боль, он также невинно смеялся. --- Масаси Кисимото "Наруто"

  • A+

категория:Основы глубокого обучения