Машинното обучение (ML) се появява на едно място, с нарастващо признание, че ML може да играе ключова роля в широк кръг от критични приложения, като например извличане на данни, обработка на естествен език, разпознаване на изображения и експертни системи. ML предоставя потенциални решения във всички тези области и не само и е създаден да бъде стълб на бъдещата ни цивилизация.
Доставката на способни дизайнери на ML все още не е догонил това търсене. Основна причина за това е, че ML е просто труден. Този урок за машинно обучение представя основите на теорията за ML, като определя общите теми и концепции, което улеснява проследяването на логиката и успокояването с основите на машинното обучение.
И така, какво всъщност е „машинно обучение“ изобщо? ML всъщност е a много от нещата. Полето е доста обширно и се разширява бързо, като непрекъснато се разделя и подразделя на гадене в различни под-специалности и видове машинно обучение .
Има обаче няколко основни общи теми и всеобхватната тема е най-добре обобщена от това често цитирано изявление, направено от Артър Самуел още през 1959 г .: „[Машинното обучение е] областта на обучение, която дава на компютрите способността да учат, без да са изрично програмирани.“
И наскоро, през 1997 г., Том Мичъл даде „добре позирана“ дефиниция, която се оказа по-полезна за инженерните типове: „Казва се, че компютърната програма се учи от опит E по отношение на някаква задача T и някаква мярка за изпълнение P, ако нейната производителност на T, измерена с P, се подобрява с опит E.“
„Казва се, че компютърната програма се учи от опит E по отношение на някаква задача T и някаква мярка за изпълнение P, ако нейната производителност на T, измерена с P, се подобрява с опит E.“ - Том Мичъл, Университет Карнеги МелънТака че, ако искате програмата ви да предсказва, например, трафик модели на оживено кръстовище (задача Т), можете да я стартирате чрез алгоритъм за машинно обучение с данни за минали модели на трафик (опит Е) и ако тя е успешно „научила ”, Тогава ще се справи по-добре при прогнозиране на бъдещи модели на трафик (мярка за ефективност P).
Силно сложният характер на много реални проблеми обаче често означава, че измислянето на специализирани алгоритми, които ще ги решават перфектно всеки път, е непрактично, ако не и невъзможно. Примери за проблеми с машинното обучение включват, „Това рак ли е?“ , „Каква е пазарната стойност на тази къща?“ , „Кои от тези хора са добри приятели помежду си?“ , „Ще избухне ли този ракетен двигател при излитане?“ , „Ще хареса ли този човек този филм?“ , 'Кой е това?' , 'Какво каза?' , и 'Как се управлява това нещо?' . Всички тези проблеми са отлични цели за проект за ML и всъщност ML е приложен към всеки от тях с голям успех.
ML решава проблеми, които не могат да бъдат решени само с цифрови средства.Сред различните видове задачи по МЛ се прави съществено разграничение между контролирано и неподдържано обучение:
Тук ще се съсредоточим предимно върху ученето под наблюдение, но краят на статията включва кратка дискусия за учене без надзор с някои връзки за тези, които се интересуват от продължаване на темата по-нататък.
В повечето приложения за контролирано обучение крайната цел е да се разработи фино настроена функция за предсказване h(x)
(понякога наричана „хипотеза“). „Обучението“ се състои в използването на усъвършенствани математически алгоритми за оптимизиране на тази функция, така че дадени входни данни x
за определен домейн (да речем, квадратура на къща), той точно ще предскаже някаква интересна стойност h(x)
(да речем, пазарна цена за споменатата къща).
На практика, x
почти винаги представлява множество точки от данни. Така например, прогноза за цените на жилищата може да вземе не само квадратура (x1
), но и брой спални (x2
), брой бани (x3
), брой етажи (x4)
, построена година (x5
), пощенски код (x6
) и т.н. Определянето кои входове да се използва е важна част от дизайна на ML. Въпреки това, за обяснение, най-лесно е да приемем, че се използва единична стойност.
Така че, да кажем, че нашият прост предиктор има следната форма:
където и
са константи. Нашата цел е да намерим перфектните стойности на
и
за да накараме предсказателя ни да работи възможно най-добре.
Оптимизиране на предиктора h(x)
се извършва с помощта на примери за обучение . За всеки пример за обучение имаме входна стойност x_train
, за която предварително е известен съответният изход, y
За всеки пример намираме разликата между известната, правилна стойност y
и нашата прогнозирана стойност h(x_train)
. С достатъчно примери за обучение тези разлики ни дават полезен начин за измерване на „грешката“ на h(x)
След това можем да променим h(x)
чрез променяне на стойностите на и
за да стане „по-малко грешно“. Този процес се повтаря отново и отново, докато системата се сближи с най-добрите стойности за
и
. По този начин предикторът се обучава и е готов да направи някои прогнози от реалния свят.
Ние се придържаме към прости проблеми в тази публикация за илюстрация, но причината ML да съществува, защото в реалния свят проблемите са много по-сложни. На този плосък екран можем да ви нарисуваме картина на най-много триизмерен набор от данни, но проблемите с ML често се справят с данни с милиони измерения и много сложни предикторски функции. ML решава проблеми, които не могат да бъдат решени само с цифрови средства.
Имайки това предвид, нека разгледаме един прост пример. Да приемем, че имаме следните данни за обучение, при които служителите на компанията са оценили своето удовлетворение по скала от 1 до 100:
Първо, забележете, че данните са малко шумни. Тоест, докато можем да видим, че има някакъв модел (т.е. удовлетвореността на служителите има тенденция да се увеличава, тъй като заплатата се покачва), не всичко се вписва добре на права линия. Това винаги ще бъде така с реалните данни (и ние абсолютно искаме да обучим нашата машина, използвайки реални данни!). И така, тогава как можем да обучим една машина, за да предскажем перфектно нивото на удовлетвореност на служителя? Отговорът, разбира се, е, че не можем. Целта на ML никога не е да правите „перфектни“ предположения, защото ML се занимава с домейни, където няма такова нещо. Целта е да се правят предположения, които са достатъчно добри, за да бъдат полезни.
Това напомня донякъде на известното изявление на британски математик и професор по статистика Джордж Е. П. Кутия че „всички модели са грешни, но някои са полезни“.
Целта на ML никога не е да правите „перфектни“ предположения, защото ML се занимава с домейни, където няма такова нещо. Целта е да се правят предположения, които са достатъчно добри, за да бъдат полезни.Машинното обучение се основава изключително на статистиката. Например, когато обучаваме машината си да учи, трябва да й дадем статистически значима случайна извадка като данни за обучение. Ако комплектът за обучение не е случаен, рискуваме модели на машинно обучение, които всъщност не са там. И ако комплектът за обучение е твърде малък (вж закон на големи числа ), няма да научим достатъчно и дори може да стигнем до неточни заключения. Например, опитът да се предскажат моделите на удовлетвореност за цялата компания въз основа на данни само от висшето ръководство вероятно ще бъде склонен към грешки.
С това разбиране, нека дадем на нашата машина данните, които сме получили по-горе, и нека тя да ги научи. Първо трябва да инициализираме нашия предиктор h(x)
с някои разумни стойности от и
. Сега нашият предиктор изглежда така, когато е поставен върху нашия тренировъчен набор:
Ако попитаме този предиктор за удовлетворението на служител, който прави $ 60k, той ще предскаже рейтинг от 27:
Очевидно е, че това беше ужасно предположение и че тази машина не знае много много.
коя от следните характеристики на купувача показва, че купувачът има висока способност за договаряне?
И така, нека да дадем този предиктор всичко заплатите от нашия набор за обучение и вземете разликите между получените прогнозни оценки на удовлетвореност и действителните оценки на удовлетвореността на съответните служители. Ако извършим малко математическо магьосничество (което ще опиша накратко), можем да изчислим с много голяма сигурност, че стойностите от 13.12 за и 0.61 за
ще ни дадат по-добър предсказател.
И ако повторим този процес, да речем 1500 пъти, нашият предиктор ще изглежда така:
На този етап, ако повторим процеса, ще открием това и
вече няма да се промени със значителна сума и по този начин виждаме, че системата се е сближила. Ако не сме допуснали грешки, това означава, че сме намерили оптималния предиктор. Съответно, ако сега отново попитаме машината за оценка на удовлетвореността на служителя, който прави $ 60 хил., Тя ще предвиди рейтинг от около 60.
Сега стигаме някъде.
Горният пример е технически прост проблем на едномерна линейна регресия , което в действителност може да бъде решено чрез извеждане на обикновено нормално уравнение и изцяло пропускане на този „настройващ“ процес. Помислете обаче за предиктор, който изглежда така:
Тази функция приема в четири измерения и има различни полиномиални термини. Извеждането на нормално уравнение за тази функция е значително предизвикателство. Много съвременни проблеми с машинното обучение отнемат хиляди или дори милиони измерения на данни, за да изградят прогнози, използвайки стотици коефициенти. Предсказването как ще се изрази геномът на организма или какъв ще бъде климатът след петдесет години, са примери за такива сложни проблеми.
Много съвременни проблеми с ML отнемат хиляди или дори милиони измерения на данни, за да изградят прогнози, използвайки стотици коефициенти.За щастие итеративният подход, възприет от системите за ML, е много по-издръжлив пред такава сложност. Вместо да използва груба сила, системата за машинно обучение „усеща пътя си” към отговора. При големи проблеми това работи много по-добре. Макар че това не означава, че ML може да реши всички произволно сложни проблеми (не може), това прави невероятно гъвкав и мощен инструмент.
Нека разгледаме отблизо как работи този итеративен процес. В горния пример как да се уверим и
се подобряват с всяка стъпка, а не по-лошо? Отговорът се крие в нашето „измерване на грешка“, споменато по-рано, заедно с малко смятане.
кое от следните не е типичен инструмент или техника, използвани в адаптивния дизайн?
Мярката за грешка е известна като функция на разходите (известен още като, функция на загуба ), . Входът
представлява всички коефициенти, които използваме в нашия предиктор. Така че в нашия случай,
наистина е двойката
и
.
ни дава математическо измерване на това колко грешен е предикторът ни, когато използва дадените стойности на
и
.
Изборът на функция на разходите е друга важна част от програма за ML. В различен контекст да бъдеш „грешен“ може да означава много различни неща. В нашия пример за удовлетвореност на служителите утвърденият стандарт е линейна функция на най-малките квадрати :
При най-малки квадратчета наказанието за лошо предположение нараства квадратично с разликата между предположението и верния отговор, така че действа като много „строго“ измерване на грешката. Функцията за разходи изчислява средно наказание за всички примери за обучение.
Така че сега виждаме, че нашата цел е да намерим и
за нашия предиктор
h(x)
такава, че нашата функция на разходите е възможно най-малък. Ние призоваваме силата на смятането, за да постигнем това.
Помислете за следния график на функция на разходите за някакъв конкретен проблем с машинното обучение:
Тук можем да видим разходите, свързани с различни стойности на и
. Можем да видим, че графиката има лека купа с формата си. Дъното на купата представлява най-ниската цена, която може да ни даде предсказателят въз основа на дадените данни за обучение. Целта е да се „претърколим надолу по хълма“ и да намерим
и
съответстващи на тази точка.
Това е мястото, където смятането влиза в този урок за машинно обучение. За да запазим това обяснение управляемо, няма да изписвам уравненията тук, но по същество това, което правим, е да вземем градиента на , което е двойката производни на
(един над
и един над
). Градиентът ще бъде различен за всяка различна стойност на
и
, и ни казва какъв е „наклонът на хълма“ и по-специално „кой път е надолу“, за тези конкретни
с. Например, когато включим нашите текущи стойности на
в градиента, може да ни каже, че добавянето на малко към
и изваждане на малко от
ще ни отведе по посока на разходната функция-дъно на долината. Затова добавяме малко към
, и извадете малко от
, и voilà! Завършихме един кръг от нашия учебен алгоритъм. Нашият актуализиран предиктор, h (x) =
+
x, ще върне по-добри прогнози от преди. Нашата машина вече е малко по-умна.
Този процес на редуване между изчисляване на текущия градиент и актуализиране на s от резултатите, е известно като градиентно спускане .
Това обхваща основната теория, лежаща в основата на повечето контролирани системи за машинно обучение. Но основните понятия могат да бъдат приложени по най-различни начини, в зависимост от разглеждания проблем.
Под надзор на ML две основни подкатегории са:
Оказа се, че основната теория за машинното обучение е горе-долу същата. Основните разлики са в дизайна на предиктора h(x)
и дизайна на разходната функция .
Нашите примери досега са фокусирани върху проблеми с регресията, така че нека сега разгледаме и пример за класификация.
Ето резултатите от проучване за тестване на качеството на бисквитки, при което всички примери за обучение са обозначени като „добра бисквитка“ (y = 1
) в синьо или като „лоша бисквитка“ (y = 0
) в червено.
При класифицирането, регресионният предиктор не е много полезен. Това, което обикновено искаме, е предиктор, който прави предположение някъде между 0 и 1. В класификатора за качество на бисквитките прогноза 1 ще представлява много уверено предположение, че бисквитката е перфектна и напълно апетитна. Прогноза за 0 представлява голяма увереност, че бисквитката е смущение за бисквитката. Стойностите, попадащи в този диапазон, представляват по-малко доверие, така че бихме могли да проектираме нашата система така, че прогнозата от 0,6 да означава „Човече, това е труден разговор, но аз ще се съглася с да, можете да продадете тази бисквитка“, докато стойността точно средата, при 0,5, може да представлява пълна несигурност. Не винаги се разпределя доверието в класификатора, но това е много често срещан дизайн и работи за целите на нашата илюстрация.
Оказва се, че има хубава функция, която улавя това поведение добре. Нарича се сигмоидна функция , g(z)
и изглежда по следния начин:
z
е някакво представяне на нашите входове и коефициенти, като:
така че нашият предиктор да стане:
Забележете, че сигмоидната функция преобразува изхода ни в диапазона между 0 и 1.
Логиката зад дизайна на функцията на разходите също е различна в класификацията. Отново питаме „какво означава едно предположение да е погрешно?“ и този път едно много добро правило е, че ако правилното предположение беше 0 и предположихме 1, тогава бяхме напълно и напълно погрешни и обратно. Тъй като не можете да грешите повече, отколкото абсолютно грешно, наказанието в този случай е огромно. Като алтернатива, ако правилното предположение е 0 и сме предположили 0, нашата функция за разходи не трябва да добавя никакви разходи за всеки път, когато това се случи. Ако предположението беше правилно, но не бяхме напълно уверени (напр. y = 1
, Но h(x) = 0.8
), това трябва да дойде с малка цена и ако предположението ни беше погрешно, но не бяхме напълно уверени (напр. y = 1
но h(x) = 0.3
), това би трябвало да дойде със значителни разходи, но не толкова, колкото ако бяхме напълно погрешни.
Това поведение се улавя от регистрационната функция, така че:
Отново функцията на разходите ни дава средната цена за всички наши примери за обучение.
И така, тук сме описали как предикторът h(x)
и разходната функция се различават между регресията и класификацията, но градиентното спускане все още работи добре.
Класификационен предиктор може да се визуализира чрез изчертаване на граничната линия; т.е. бариерата, при която прогнозата се променя от „да“ (прогноза по-голяма от 0,5) на „не“ (прогноза по-малка от 0,5). С добре проектирана система, нашите бисквитки данни могат да генерират граница на класификация, която изглежда така:
Сега това е машина, която знае нещо или две за бисквитките!
Никое обсъждане на машинното обучение не би било пълно, без поне да се спомене невронни мрежи . Не само невронните мрежи предлагат изключително мощен инструмент за решаване на много трудни проблеми, но също така предлагат очарователни намеци за работата на нашите собствени мозъци и интригуващи възможности за един ден, създавайки наистина интелигентни машини.
Невронните мрежи са подходящи за модели на машинно обучение, където броят на входовете е гигантски. Изчислителните разходи за справяне с такъв проблем са твърде огромни за типовете системи, които обсъдихме по-горе. Както се оказва обаче, невронните мрежи могат да бъдат ефективно настроени с помощта на техники, които са поразително подобни на градиентното спускане по принцип.
Обстойното обсъждане на невронните мрежи е извън обхвата на този урок, но препоръчвам да разгледате нашия предишен пост по темата.
Неуправляваното машинно обучение обикновено има за задача да намира връзки в рамките на данните. В този процес не се използват примери за обучение. Вместо това системата получава набор от данни и има за задача да намери модели и корелации в тях. Добър пример е идентифицирането на сплотени групи приятели в данните в социалната мрежа.
Алгоритмите за машинно обучение, използвани за това, са много различни от използваните за контролирано обучение и темата заслужава своя публикация. Въпреки това, за да може междувременно да се дъвче нещо, погледнете алгоритми за клъстериране като k-означава , а също и разгледайте намаляване на размерността системи като анализ на основните компоненти . Нашият приор публикуване на големи данни обсъжда по-подробно и редица от тези теми.
Тук сме разгледали голяма част от основната теория, залегнала в областта на машинното обучение, но разбира се, едва сме надраскали повърхността.
Имайте предвид, че за да приложите наистина теориите, съдържащи се в това въведение, към примери за машинно обучение в реалния живот, е необходимо много по-задълбочено разбиране на обсъжданите тук теми. Има много тънкости и подводни камъни в ML и много начини да се отклоните от това, което изглежда перфектно настроена мисловна машина. Почти всяка част от основна теория може да се играе с тях и да се променя безкрайно, а резултатите често са очарователни. Много от тях прерастват в изцяло нови области на обучение, които са по-подходящи за определени проблеми.
Ясно е, че машинното обучение е невероятно мощен инструмент. През следващите години тя обещава да помогне за решаването на някои от най-належащите ни проблеми, както и да отвори цели нови светове на възможности за фирми за наука за данни . The търсене на инженери за машинно обучение само ще продължи да расте, предлагайки невероятни шансове да бъдете част от нещо голямо. Надявам се, че ще помислите да се включите в действието!
Тази статия се опира основно на материали, преподавани от професор от Станфорд Д-р Андрю Нг в неговия безплатен и отворен курс за машинно обучение . Курсът обхваща всичко, обсъдено в тази статия, и дава много практически съвети за практикуващия ML. Не мога да препоръчам този курс достатъчно високо за тези, които се интересуват от по-нататъшно проучване на това завладяващо поле.
Свързани:Дълбокото обучение е метод на машинно обучение, който разчита на изкуствени невронни мрежи, позволявайки на компютърните системи да учат като пример. В повечето случаи алгоритмите за дълбоко обучение се основават на информационни модели, открити в биологичните нервни системи.
Както е описано от Артър Самюел, машинното обучение е „областта на изследване, която дава на компютрите способността да учат, без да бъдат изрично програмирани“.
Изкуствен интелект (AI) е широк термин, използван за описване на системи, способни да вземат определени решения сами. Машинното обучение (ML) е специфичен предмет в по-широката сфера на ИИ, описващ способността на една машина да подобри способността си чрез практикуване на задача или излагане на големи масиви от данни.
колко струва един терминал на bloomberg на месец
Машинното обучение изисква много отдаденост и практика за учене, поради многото тънки сложности, свързани с осигуряването на това, че вашата машина научава правилното, а не грешното нещо. Отличен онлайн курс за машинно обучение е курсът на Andrew Ng's Coursera.
Прекаленото приспособяване е резултат от фокусирането на алгоритъма за машинно обучение прекалено отблизо върху данните за обучение, така че да не е достатъчно обобщен, за да обработи правилно новите данни. Това е пример за машина, която „научава погрешно нещо“ и става по-малко способна да интерпретира правилно нови данни.
Модел за машинно обучение е набор от предположения за основната природа, за която се обучават данните. Моделът се използва като основа за определяне на това, което трябва да научи алгоритъм за машинно обучение. Добър модел, който прави точни предположения за данните, е необходим, за да може машината да даде добри резултати