Néhány évvel ezelőtt elhatároztam, hogy többet megtudok az AI-ról és a gépi tanulásról (ML), valamint arról, hogyan alkalmazhatnám azt saját cégeimnél, vagy legalább intelligensen beszélhetek adattudományi és mérnöki csapatainkkal.

Online tanfolyamokon vettem részt, videókat néztem és sikeres vizsgákat tettem, de nem éreztem, hogy igazán érteném, hogyan kell alkalmazni és integrálni a gépi tanulást a vállalkozásomba. Annyi kérdés maradt megválaszolatlanul. Ha ez ismerősen hangzik, olvass tovább.

Demó

Hogy inspirálja Önt ennek a cikknek és a „sorozat 2. részének” elolvasására, dőljön hátra, és először nézze meg a működő gépi tanulási folyamat bemutatóját.

A legtöbben az ML-folyamatot úgy írják le, mint az adatok rendszerezésére és finomítására, az adatok gépi tanulási modellek betanításához, majd ezeknek a modelleknek az alkalmazáson belüli kiszolgálására vagy használatára irányuló lépések sorozatát. Ne aggódjon, ha ezeknek a kifejezéseknek még nincs értelme.

Ez a bemutató saját strukturált adatokat hoz létre a felhasználói bevitelből, így leegyszerűsíti a folyamatot a könnyebb érthetőség érdekében – legalábbis remélem. Következő cikkemben megosztom a forráskódot és a tervezési és felépítési megközelítést.

Az ML szókincs hiányának áthidalása

A legtöbb hozzám hasonló szoftvermérnöki vagy termékháttérrel rendelkező ember ismerős nyelvet beszél, olyan kifejezésekkel, mint az osztály, módszer, függvény, paraméter, bemenet, kérés, változó, hurok, kimenet, return és response.

A gépi tanulás világában vannak olyan analóg kifejezések, mint a megfigyelés, modell, dimenzió, szolgáltatás, illeszkedés, edzés, tesztelés,éskövetkeztetés. Adjon hozzá matematikai görög szimbólumokat, például thétát, és a feje forogni kezd. Eleinte elsöprő tud lenni, de ahogy haladunk, könnyebben megtanuljuk ezeket a kifejezéseket.

A legegyszerűbb formájában a gépi tanulási modell egy matematikai függvény, amely numerikus bemenetek esetén numerikus kimenetet ad vissza.

Úgy gondolom, hogy a jelenlegi tanításokkal az a probléma, hogy túl sokáig tart a technológia használatának megértése, ezért kezdjük a következő kérdésekkel:

  1. Hogyan használhatom ezt a funkciót a való életben (más néven kiszolgálás)?
  2. Hogyan hozhatom létre ezt a funkciót (más néven képzés)?
  3. Mely technikák a legjobbak bizonyos problémák esetén?

TL;DR

Térjünk rá, tanuljuk meg ezeket a válaszokat fordított sorrendben, ahogy a legtöbben tanítják.

1. A modellek kiszolgálása (a funkció használatával egy alkalmazásban)

A gépi tanulási modelleket, más néven függvényeket a rendszer fájlokban tárolja. A szoftverkönyvtárak megnyithatják és futtathatják őket, fogadhatnak bemeneteket, és visszaadhatják az eredményeket.

Gondoljon ezekre a modellfájlokra, mint például a mini „táblázatokra”. Van néhány sejtjük képletekkel. Amikor átadja a bevitelt a „táblázatnak”, az értékeit cellákba helyezi (mint a sárga cellák alatt), és kiszámítja a visszatérési értéket, amely az Ön előrejelzése (mint az alábbi zöld cella).

Figyeld meg a képzési adataimban (a továbbiakban bővebben lesz szó), hogy akár 1, akár 2 konyhám volt, az nem változtatta meg az árat. A súly (szorzó) ezért közel 0, mert ez nem fontos jellemző az ár meghatározásához.

Most, amikor az „Ágyakat” „4”-re változtattam, a jóslat megközelítette a 250 000-es értéket. Az ML algoritmusok apró töredékekre állítják be a súlyokat, hogy a lehető legközelebb álljanak a pontossághoz az összes bemenethez. Ezért nagyon ritka a 100%-os pontosság.

Egy népszerű modellfájl formátum az úgynevezett "pickle", a létrehozásukra és futtatására szolgáló eszköz pedig a "joblib". Más keretrendszereknek, mint például a TensorFlow és a PyTorch megvannak a saját formátumai, és vannak kísérletek univerzális formátumokra, hogy a modelleket hordozhatóbbá tegyék.

Ahhoz, hogy modelljét az alkalmazásban (kiszolgálás) a fentiek szerint használhassa, importálja a fájl létrehozásához használt kompatibilis könyvtárverziót, töltse be(), majd jósolja meg () ugyanúgy, mint bármely más funkció a szoftverekben. Később megosztok egy működő példát, de ez tényleg az!

2. A modellek betanítása (a funkció kialakítása)

Később részletesebben is kitérünk, de feltételezzük, hogy ételt akart kapni, és jósolja meg, hogy gyermeke ízleni fog-e; mindannyian tudjuk, hová vezet ez! ;-)

Hagyományosan kézzel írunk egy függvényt ismert szabályokkal:

A beviteli adatok (jellemzők) lehetnek az élelmiszerrel kapcsolatos attribútumok, például típus, illat, fűszer, hőmérséklet, cukortartalom, >vagyszín. Az előre jelzett kimenet (következtetés) vagy „” vagy „rossz”.

A fenti függvény kézi beírásával az a probléma, hogy valóban tudja-e az ideális hőmérséklet, édesség vagy illat, és mely tényezők a legfontosabbak a gyermek számára annak eldöntésében, hogy „” vagy „rossz”. ”. Ez a megközelítés a legjobb esetben is próbálkozás és hiba.

Most képzelje el, hogy az Ön által birtokolt adat tízezer rekord. Az agy nem képes megjegyezni és korrelálni ezeket az értékeket, hogy meghatározza, hol van a fűszerszint, a hőmérséklet, a szag és az édesség határpontja. Ha számítógépet használ, és átadja az összes adatot, az általában másodperceken belül ki tudja deríteni, és meghatározza a matematikai függvényt, amely visszaadja a helyes előrejelzéseket. Ebben segít nekünk a gépi tanulás.

Maradjunk most egyszerűek az alábbi kóddal:

Ez egy leegyszerűsített példa a gépi tanulás „demisztifikálására”. Ahelyett, hogy saját maga írná meg a függvényt és a szabályokat, olyan algoritmust használ, amely iteratív módon megszorozza az egyes bemeneti értékek különböző súlyait, amíg az idő nagy részében a helyes válaszokat adja vissza (emlékezzen a fenti táblázatra).

Tegyük fel, hogy 100 rekordot írt be, és egy minta jelenik meg, amely szerint minden alkalommal, amikor az étel színe 4, az eredmény 0 („rossz”). A függvény elkezdi írni magát, amikor felfedezi ezeket a szabályokat, ahogy a manuális függvényében is voltak szabályok. A válasz (következtetés) többnyire helyes, mert Ön hozta létre a függvényt (megtanította a modelljét) néhány olyan adat alapján, amely már rendelkezett helyes válaszokkal (címkék). >).

Képzelje el, hogy egy hónappal később a gyermeke azt mondja, hogy szereti a brokkolit. Zöld színű, ezért ki kell találnia, hogyan írja át az első függvényt, hogy figyelembe vegye. Az adatok változásával ez egyre nehezebbé válik. A gépi tanulás használatával egyszerűen betáplálja az új információkat, és újratanítja a modellt, amíg pontos előrejelzéseket nem kap. Ez az az erő, amit kínál.

3. Milyen technikák a legjobbak bizonyos problémák esetén?

Ezt kihagyjuk. A legtöbb mesterséges intelligencia tanfolyam az ML algoritmusok kategóriáival kezdődik, és szerintem ez bonyolítja a tanulási folyamatot. Egyelőre figyelmen kívül hagyja. Először szerezzen megértést, később pedig bővítse tudását.

Összefoglalva az eddig tanultakat

Remélem, megérti, hogy lehet manuálisan létrehozni egy függvényt, mint a fenti, és kitalálni olyan megszorításokat, mint például „ha egy zöldség rossz”, és potenciálisan pontos eredményeket kap.

Ahogy az előrejelzés típusa egyre bonyolultabbá válik, a sebesség kritikus fontosságú, vagy mivel több adatpontot kell figyelembe venni, felülmúlja a fejben történő biztonságos kitalálás képességét, és ebben segíthet a gépi tanulás.

Terminológia

  • Modell – egy számítógépes program által generált matematikai függvény, amely egyedi súlyokat alkalmaz a numerikus bemeneti értékekre, és numerikus eredményt ad vissza.
  • Funkció – egy numerikus bemeneti érték vagy paraméter (más néven dimenzió), amelyet átad a függvénynek, hogy az előrejelzést adjon vissza.
  • Címke – egy ismert válasz a múltbeli adatokra (más néven osztály), mint például a gyermekételek ízében már tudtuk, hogy szeretik a pizzát és a süteményt, nem pedig a spenótot, ezért pizzát és süteményt adtunk. 1-es érték a jó, a spenót pedig 0 a rossz érték.
  • Megfigyelés – egy adott bemenetről összegyűjtött funkciók, például a pizzából kivont funkciók.
  • Funkciótervezés – egy adott megfigyelés azon attribútumainak azonosítása, amelyek valószínűleg befolyásolják az eredményt, és számértékekké konvertálják őket, így a kézzel írt függvények helyett matematikai függvényeket hozhat létre, például színeket és ételtípusokat alakítottunk át számokat úgy, hogy a karakterlánc értéke helyett a tömbindexükre hivatkozik (más néven szolgáltatás kivonása).
  • Tréning – ismétlődő iteráció egy adathalmazon, különböző súlyozások (théta) kipróbálása az egyes funkciókon, amíg a legtöbb eredmény helyes lesz.
  • Illeszkedés – a színfalak mögött az Ön ML-algoritmusa megpróbálja kitalálni egy olyan vonal koordinátáit, amely el tudja választani a „” és a „rossz” rekordokat. így a sor egyik oldalán ábrázoló jövőbeli rekordok „”, a másik oldalon pedig „rossz”-nak számítanak. Valójában ez az, amit az edzés csinál, de most ne aggódj miatta.
  • Következtetés – technikailag ez a „jóslás aktusa”, de az egyértelműség kedvéért tekintse ezt a modellfüggvény által visszaadott eredménynek vagy előrejelzésnek (azaz – tekintettel ezekre a paraméterekre, ebből a válaszból következtetek).
  • Kiszolgálás – a függvény használata egy programban a modellfájl betöltésével és paraméterek átadásával, hogy előrejelzéseket adhasson vissza.
  • Tesztelés – tesztfunkciók átadása a modellhez, hogy előrejelzéseket kaphasson, majd az eredmények összehasonlítása egy rekordcsoport ismert értékeivel (címkéivel).
  • Pontosság – a várt eredménynek megfelelő előrejelzési eredmények százalékos aránya az összes tesztrekordon belül. A későbbi kutatásra szánt jövőbeni kifejezések: precíziós és visszahívás.

Kevésbé fontos kifejezések jelenleg, de a jövőben előkerülnek:

  • Téta – a súly szorozva az egyes jellemzőkhöz képest, hogy az eredményre gyakorolt ​​észlelt hatás alapján előrejelzést adjon vissza. Jó példa erre az otthoni értékek előrejelzése. Talán egy 3 hálószobás, 2 konyhás ház eladása 200 000 dollár. Egy másik 3 hálószobás, 1 konyhás ház eladása 200 000 dollár. Egy 4 szobás ház eladása 250 ezer dollár. A modell magasabb thétát (más néven súlyt vagy fontosságot) adhat az ágyak száma funkciónak, mivel befolyásolja az árat, és alacsonyabb thétát számos konyhában, mert volt csekély hatása.
  • Hiperparaméter-hangolás – ha tudja, hogy bizonyos jellemzők többé-kevésbé fontosak az eredmény meghatározásához, alkalmazhatja saját súlyozását az előfeldolgozás vagy a funkciótervezés során, hogy tovább javítsa az előrejelzések pontosságát. A cél a rossz előrejelzések miatti veszteség (más néven büntetés) minimalizálása, hogy az előrejelzések kevésbé legyenek érzékenyek a bemeneti változásokra. Tudom, hogy durva, ezért most hagyd figyelmen kívül.

Folyamat

Megtudtuk, hogy a kiszolgálás egy szoftverkönyvtárat használ, amely képes olvasni és végrehajtani a mentett modellfájlt (azaz joblib). Ha lenne webes API-ja, és az olyan paramétereket fogadott el, mint az étel típusa, fűszer, édesség stb., betöltése()-e a modellbe, és átadhatná ezeket a paramétereket, és az megjósolja () strong> egy 1 vagy 0. Az API 1 = „” és 0 = „rossz” értelmezést ad a felhasználóknak adott válaszában.

Azt is megtudtuk, hogy modelljének betanításához előfordulhat, hogy funkciótervezést kell végrehajtania. Itt azonosíthatja az adott ételhez kapcsolódó értékeket (megfigyelés), amelyek befolyásolhatják az eredményt, és néhányat számokká alakítanak át, hogy azokat matematikai függvényekbe lehessen betáplálni. Ezután félretesz néhány ismert (felcímkézett) rekordot a pontosság tesztelésére, és edzi (illeszti) a modellt, amíg a pontosság javul.

Most nézzünk meg egy gyakorlati alkalmazást, mielőtt belemerülnénk a tényleges megvalósításba.

A gépi tanulás alkalmazása üzleti problémára

Azt hiszem, segít elmagyarázni a dolgokat olyan kifejezésekkel, amelyekhez az emberek hozzá tudnak kapcsolódni. Képzelje el, hogy van egy webhelye, és több előfizetőt szeretne (hogy feliratkozzon valamire). Korábban azonos összegeket költöttél a Google-on, a Facebookon, a televízión, a rádión és a nyomtatott oldalon. Ugyanolyan költségvetéssel rendelkezik a következő évben a hirdetésre, és tudnia kell, hogy hol költse el a legjobban a pénzt, hogy húsz százalékkal növelje az új előfizetők számát.

Ki kell találnia, hogy hirdetési kiadásainak hány százalékát fordítsa az egyes szolgáltatókra, hogy minél több új előfizető legyen.

A tavalyi év minden hónapjában elemezte új előfizetőit, valamint a forrást a megfelelő költségekkel és feliratkozásokkal. Felfedezte, hogy a legtöbb előfizető a Google-tól, majd a Facebooktól, majd a televíziótól, néhányan pedig a rádiótól és a nyomtatott oldalaktól érkezett, de az összegek szezononként vagy akár hónaponként is változnak.

Ha más összegeket költöttem, mint tavaly ugyanazoknál a szolgáltatóknál, regisztrálhattam volna több előfizetőt?

Használta már a „Célkeresés” alkalmazást az Excelben?

Hagyományosan a költségvetés elosztásának optimalizálására tett kísérlete egy találgatással vagy elmélettel kezdődhetett, majd talán néhány szimulációval egy táblázatban. Beilleszted a tavalyi eredményeket, és minden sorba beleírod az egyes szolgáltatókra költött összeget, és azt, hogy hány új előfizetőt szállított le mindegyik, milyen áron, és esetleg más adatpontokat, amelyeket fontosnak tartasz. Ezeket az értékeket újra és újra módosítja, hogy lássa, nagyobb számú előfizetőt kap-e.

Valójában ezt teszi az Excelbe beépített „Célkeresés” funkció automatikusan, de kevesen használják, vagy nem is tudnak róla. Az alábbi példához hasonló célt állít be, és az iteratív módon módosítja a többi cellában lévő összeget, amíg el nem éri a kívánt értéket a kimeneti cellában.

Ha figyelembe vesszük a hirdetési példát, akkor megpróbálja megtalálni az egyes hirdetéstípusok relatív fontosságát, és hozzárendelni a teljes költségkeret egy százalékát (vagy súlyát). Tudja, hány előfizetője volt tavaly, és 20%-kal többet szeretne ugyanabban a költségvetésben.

Ezt állítja be célértékként, majd módosítja az egyes szolgáltatókra fordított %-ot, amíg el nem éri a célt. Így képezik a gépi tanulási modelleket, ismétlődnek az adatokon és változtatják az értékeket (a súlyok szorozva a bemeneti paraméterekkel), amíg közelebb nem kerül az ismert válaszokhoz (címkék).

Ne aggódjon, ha ennek nincs értelme. Ahogy felfedezi az alkalmazást és még sok minden mást a 2. részben, majd nézze meg újra ezt a részt, a dolgok elkezdenek "kattanni" (remélem).

A gépi tanulás a következő szintre emeli a „Célkeresést”.

Sok próbálkozás és hiba után megtalálja a megfelelő keveréket (súly vagy százalékos arány minden hirdetéstípushoz) a cél eléréséhez. Tegyük fel, hogy az Ön adatai napi 100 feliratkozást tartalmaznak az év 365 napján, és a különböző napok több regisztrációt eredményeztek egyik szolgáltatónál, mint a másiknál. Túlságosan nehéz lenne azonosítani a 36 500 adatsor különbségét a szolgáltatótól, a hét napjától, az év napjától, a megtekintésektől, kattintásoktól, konverzióktól, feliratkozásoktól, kattintásonkénti vagy megjelenítésenkénti költségtől stb.

Remélhetőleg egyértelmű, hogy bizonyos problémák egyszerűen nem alkalmasak arra, hogy az emberek megoldják, és ez az egyik olyan funkció, amelyet gyermeke ételízével ellentétben valószínűleg a legjobb automatizálni. A gépi tanulási algoritmusok sokban hasonlítanak a „Célkereséshez”, de képesek egyszerre több cellában iteratív módon megváltoztatni az értékeket, és minden változtatást tesztelni, amíg a kimeneti érték közelebb nem kerül az ismerthez (címke vagy osztály). ) bármely adott bemenethez.

Tovább a 2. részhez megtudhatja, hogyan készült a fenti demó, és megtudhatja, hogyan készült a forráskódra mutató hivatkozás.