Автор Xixia

1) Что такое машинное обучение и зачем оно нам?

Что такое машинное обучение? Сначала рассмотрим два примера.

Как научиться распознавать животное как «кошку»?

Представьте себе людей, которые никогда не видели кошек, например маленьких детей. В их словаре нет даже слова «кошка».

Однажды они видят такое пушистое животное:

Они не знают, что это, а вы им говорите, что это «кот». В это время они могут вспомнить, что это кошка.

Через какое-то время они видят другое животное, подобное этому:

Вы говорите им, что это тоже кошка. Они помнят, что это тоже кошка.

Позже они видят другое животное:

В это время они прямо говорят вам, что видят «кошку».

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

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

Как определить пакет npm как тестовый пакет npm?

Ниже приводится фрагмент кода, написанный одним из моих коллег:

SELECT * FROM
  tianma.module_xx
WHERE
  pt = TO_CHAR(DATEADD(GETDATE(), - 1, 'dd'), 'yyyymmdd')
  AND name NOT LIKE '%test%'
  AND name NOT LIKE '%demo%'
  AND name NOT LIKE '%测试%'
  AND keywords NOT LIKE '%test%'
  AND keywords NOT LIKE '%测试%'
  AND keywords NOT LIKE '%demo%'

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

Идентификация кошки по сути такая же, как идентификация тестового модуля. Оба подразумевают поиск характеристик:

  • Характеристики кошки: мяуканье, два уха, четыре лапы, хвост и усы.
  • Характеристики тестового модуля: тестовый или демонстрационный

Характеристики могут быть дополнительно запрограммированы следующим образом:

  • Характеристики кошки: мяуканье: настоящее, уши: 2, лапы: 4, хвост: 1, усы: 10.
  • Характеристики тестового модуля: test: count ›0 или demo: count› 0

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

Проще говоря, машинное обучение использует характеристики и их веса для реализации классификации данных. Это упрощенное заявление сделано для вашего понимания. Для получения дополнительной информации см. AiLearning / 1. Basic Machine Learning.md на master apachecn/AiLearning на GitHub.

Зачем нам машинное обучение?

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

2) Как обучить машину и получить модель?

Подготовить данные

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

1) Соберите основные данные.
2) Удалите выбросы.
3) Выберите возможные характеристики: характеристика инженерных.
4) Пометьте данные.

Подготовить алгоритм

Подберите свои данные с помощью функции: y = f (x)

Например, используйте линейную функцию: y = ax + b

Оцените алгоритм

Используйте функцию оценки, чтобы узнать, нашли ли вы правильные значения «a» и «b».

Функция оценки описывает разницу между параметрами, полученными в результате обучения, и фактическими значениями. Разница также называется стоимостью убытка. На следующем рисунке показан пример:

Синяя линия справа ближе к фактическим точкам данных.

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

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

[
[x1, y1],
[x2, y2],
[x3, y3],
[x4, y4],
[x5, y5],
[x6, y6]
]

Предполагаемые координаты на синей линии следующие:

[
[x1, y'1],
[x2, y'2],
[x3, y'3],
[x4, y'4],
[x5, y'5],
[x6, y'6]
]

Следовательно, величина убытка составляет:

const cost = ((y'1-y1)^2 + (y'2-y2)^2 + (y'3-y3)^2 + (y'4-y4)^2 + (y'5-y5)^2 + (y'6-y6)^2 )/6

Обучите алгоритм

Найдите правильные значения a и b на основе самой низкой точки параболы

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

Чтобы прояснить цель, замените предыдущую формулу расчета величины убытка на y = ax + b.

// Function 2
const cost = (((a*x1+b)-y1)^2 + ((a*x2+b)-y2)^2 + ((a*x3+b)-y3)^2 + ((a*x4+b)-y4)^2 + ((a*x5+b)-y5)^2 + ((a*x6+b)-y6)^2 )/ 6

Наша цель - найти значения «a» и «b», которые минимизируют стоимость. С этой целью мы можем сразу же найти решение.

Вы все еще помните квадратичные функции, которые вы изучали в средней школе, которые представляют собой квадратные уравнения: y = ax² + bx + c?

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

Пока мы можем найти значения «a» и «b» для самой низкой точки, мы сможем достичь нашей цели.

Определите самую низкую точку параболы по наклону, который равен нулю в самой низкой точке

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

Как показано на предыдущем рисунке, нам нужно только увеличить значение «а», чтобы приблизиться к самой низкой точке. Однако машины не могут понять график. В этом случае мы обращаемся к самому сложному математическому знанию в этой статье: производной. В этой точке наклон касательной - это производная этой параболы, например, самая низкая точка (наклон 0) на предыдущем графике.

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

Как найти производную от функции затрат?

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

// Function 3
// Partial derivative of a
const costDaoA = (((a*x1+b)-y1)*2*x1 + ((a*x2+b)-y2)*2*x1 + ((a*x3+b)-y3)*2*x1 + ((a*x4+b)-y4)*2*x1 + ((a*x5+b)-y5)*2*x1 + ((a*x6+b)-y6)*2*x1 )/ 6
// Partial derivative of b
const costDaoB = (((a*x1+b)-y1)*2 + ((a*x2+b)-y2)*2 + ((a*x3+b)-y3)*2 + ((a*x4+b)-y4)*2 + ((a*x5+b)-y5)*2 + ((a*x6+b)-y6)*2 )/ 6

Если мы введем значения «a» и «b» в функцию costDaoA, мы получим наклон, который определяет, как настроить параметр «a», чтобы приблизиться к нижней границе.

Точно так же costDaoB определяет, как отрегулировать параметр «b», чтобы приблизиться к низу.

Выполните 500 циклов

Если вы пробежите 500 циклов таким образом, вы можете очень близко подойти к дну и получить правильные значения «a» и «b».

Получить модель

Получите такую ​​модель, как y = ax + b, которую мы можем использовать для выполнения оценок.



3) Начните с простой практики: линейной регрессии

Что такое линейная регрессия?

Всем известно, что сверчки в жаркую погоду щебечут чаще, чем в прохладную. Мы записали температуру и щебетание сверчка в минуту в таблице и изобразили таблицу в Excel следующим образом (пример взят из официального руководства Google TF):

Понятно, что эти красные точки находятся почти на прямой линии:

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

Использование браузера для демонстрации линейной регрессии

Адрес: тестовый градиентный спуск

Https://jshare.com.cn/feeqi/CtGy0a/share?spm=ata.13261165.0.0.6d8c3ebfIOhvAq

Мы используем highcharts для визуализации данных и напрямую используем точки данных по умолчанию highcharts, чтобы сэкономить 75% затраченного времени.

Когда обучение завершено, на график накладывается синяя линия, и добавляется кривая скорости потери значений «a» и «b» для каждого цикла обучения.

Код Описание

/**
* Cost function and calculation of the mean squared error
*/
function cost(a, b) {
    let sum = data.reduce((pre, current) = >{
        return pre + ((a + current[0] * b) - current[1]) * ((a + current[0] * b) - current[1]);
    },
    0);
    return sum / 2 / data.length;
}
/**
* Calculate the gradient
* @param a
* @param b
*/
function gradientA(a, b) {
    let sum = data.reduce((pre, current) = >{
        return pre + ((a + current[0] * b) - current[1]) * (a + current[0] * b);
    },
    0);
    return sum / data.length;
}
function gradientB(a, b) {
    let sum = data.reduce((pre, current) = >{
        return pre + ((a + current[0] * b) - current[1]);
    },
    0);
    return sum / data.length;
}
// Number of training cycles
let batch = 200;
// This is the speed at which the result value gets closer to the bottom in each cycle. It is also the learning speed. If it is too high, the result value will bounce around the lowest point. If the speed is too low, the learning efficiency will become lower.
let alpha = 0.001;
let args = [0, 0]; // Initialized a and b values
function step() {
    let costNumber = (cost(args[0], args[1]));
    console.log('cost', costNumber);
    chartLoss.series[0].addPoint(costNumber, true, false, false);
    args[0] -= alpha * gradientA(args[0], args[1]);
    args[1] -= alpha * gradientB(args[0], args[1]);
    if ((—batch > 0)) {
        window.requestAnimationFrame(() = >{
            step()
        });
    } else {
        drawLine(args[0], args[1]);
    }
}
step();

4) Что дальше?

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

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

Если вы хотите начать свой путь AI / ML в Alibaba Cloud, посетите страницу Платформа машинного обучения для AI (PAI), чтобы узнать больше.

Ссылки

1) GitHub - apachecn / AiLearning: AiLearning: Машинное обучение - Машинное обучение - ML, Deep Learning - DeepLearning - DL, Обработка естественного языка - NLP
2) https://developers.google.com/machine-learning/ ускоренный курс / спуск в мл / видео-лекция? hl = zh-cn
3) Изучите машинное обучение с нуля: пошаговое руководство по реализации градиентного спуска с помощью Python

Мнения, выраженные здесь, предназначены только для справки и не обязательно отражают официальные взгляды Alibaba Cloud.

Первоисточник:



Получите доступ к экспертному обзору - Подпишитесь на DDI Intel