Apple CreateML versus Kaggle

Tijdens de recente WWDC presenteerde Apple hun nieuwste tool genaamd CreateML. Als ML-liefhebber was ik echt onder de indruk van wat ik heb gezien tijdens een speciale sessie (703), dus ik dacht dat het de moeite waard was om te onderzoeken hoe krachtig het echt is.

1. CreateML in een notendop (u kunt overslaan als u de WWDC-presentatie hebt bekeken).

Create ML is een nieuw framework dat is ontworpen om ontwikkelaars te helpen eenvoudig en snel machine learning-modellen te bouwen met behulp van Swift en Xcode. Vooralsnog kan het met 3 soorten gegevens werken: afbeeldingen, tekst en tabelgegevens. De workflow is heel eenvoudig, u hoeft alleen maar trainingsgegevens te leveren, een paar regels code te schrijven en er gebeurt magie, het kleine CoreML-model is klaar om te worden gebruikt in uw app. Apple belooft de trainingstijd aanzienlijk te verkorten, wat in geval van 10.000 afbeeldingen in minuten zou moeten worden geteld (zoals altijd vermijdt Apple het verstrekken van details). Training is zo snel, omdat (in het geval van beeldclassificatie) Apple Transfer Learning gebruikt. We weten niet wat Neural Network is, maar tijdens de presentatie werd Inception-v3 genoemd als een voorbeeld van de nieuwste oplossing voor beeldclassificatie.

2. WWDC Demo-presentatie in een notendop (u kunt overslaan als u de WWDC-presentatie hebt bekeken).

Tijdens WWDC lieten presentatoren zien hoe gemakkelijk we verschillende modellen kunnen bouwen, eerst was het classificeren van afbeeldingen, gebouwd met slechts enkele coderegels:

Het tweede voorbeeld leek sterk op elkaar, waarbij de tekstclassificator beslist of tekst positief of negatief is, omdat in afbeeldingsgeval alleen een paar coderegels voldoende waren om het te trainen:

Wat mij betreft, de meest interessante demo was de laatste, die werk met tabelgegevens presenteerde. In dit geval gebruikt CreateML een nieuw gegevensformaat, MLDataTable genaamd, op het eerste gezicht is het slechts een wrapper voor de normale gegevensmatrix, heeft gelukkig een CSV- en JSON-parser ingebouwd.

In het geval van tabelgegevens biedt CreateML 2 paden: eenvoudig één en een beetje geavanceerder. Neem eerst een kijkje op de eenvoudigste manier om de huizenprijsformule te vinden, deze ziet er bijna hetzelfde uit als beide vorige voorbeelden:

Gegevensproblemen in tabelvorm kunnen worden opgelost (afhankelijk van het geval) met MLRegressor voor regressieproblemen en MLClassifier voor classificatie. Maar dat is niet alles wat echt interessant is, terwijl u aan tabelgegevens werkt, kunt u handmatig beslissen welke classificatiemethode / regressie zal worden gebruikt, omdat het CreateML-ondersteuningspaar het meest wordt gebruikt in de industrie:

3. CreateML in echte problemen

Demo-apps zijn altijd zo eenvoudig mogelijk, het maakt ze gemakkelijk te begrijpen en dat is prima. In het geval van Machine Learning betekent het feit dat iets werkt met een eenvoudig voorbeeld niet echt dat het met een meer geavanceerde zal werken. CreateML-doelgebruikers zijn ontwikkelaars, geen ML-experts of datawetenschappers, dus ik besloot me te gedragen als een gemiddelde ML-newbie, analyseer de gegevens niet diep, zet sets gewoon in CreateML en laat het de magie doen. Ik besloot om Kaggle-wedstrijden als benchmark te gebruiken en vervolgens de kwaliteit van het model te vergelijken met wat Kagglers heeft bereikt, ik wilde ook controleren hoe snel CreateML is. In veel gevallen is het begrip van gegevens en preprocessing de sleutel tot het succesvolle model, als de ontwikkelaar CSV alleen importeert en MLRegressor uitvoert met resultaten van hoge kwaliteit voor een geavanceerd probleem ... hij kan echt teleurgesteld zijn over het effect. Daarom besloot ik om voorbeelden te kiezen, die in de buurt van echte problemen liggen, maar niet erg complex, omdat dit zinloos zou zijn zonder gegevens vooraf te verwerken.

Mijn Macbook Pro-configuratie als referentie:

Ik begon met het testen van Image Classifier, voor het testen gebruikte ik “Plant Seedlings Classification” (https://www.kaggle.com/c/plant-seedlings-classification), met als doel het bepalen van de soort van een zaailing uit een afbeelding. Dataset is aanzienlijk groter dan die in de demo, het bevat meer dan 4300 afbeeldingen, ik voer de code uit met slechts 2 coderegels, het resultaat is hieronder zichtbaar:

Ik was echt onder de indruk van het resultaat, het duurde 5 minuten op een typische laptop voor ontwikkelaars om een ​​redelijk goed model te trainen, met behulp van 1,7 GB aan trainingsgegevens. Is er een betere manier om het Proof of Concept-model te bouwen en in de werkende iOS / macOS-app te zetten om een ​​idee te verifiëren? Ik denk van niet. Apple, je hebt het echt goed gedaan. Wat ook interessant is om op te merken, is dat CreateML automatisch validatieset maakt van degene die als training wordt aangeboden, zodat ontwikkelaar deze gegevens niet handmatig hoeft te splitsen, een kleine stap om het proces te vereenvoudigen.

Ok, niet iedereen gaat de app 'Niet hotdog' bouwen, dus laten we eens kijken naar een ander veel voorkomend geval in machine learning, 'tabelgegevens' en regressie- / classificatieproblemen. In dit geval ben ik begonnen met "Aan de slag Titanic Survivals" (https://www.kaggle.com/c/titanic), het doel van deze wedstrijd is om te bepalen of een bepaalde passagier een botsing met ijsberg zal overleven op basis van gegevens zoals leeftijd, geslacht , type ticket, kaartspel, etc.

Ik heb het CSV-bestand gedownload, MLClassifier gemaakt, op Play gedrukt en ...

Ok, het werkt niet, CreateML heeft perfect schone gegevens nodig. Dat is geen groot probleem, ik kan rijen met lege kolommen verwijderen met behulp van een paar regels Python, maar dat vermindert de hoeveelheid trainingsgegevens van 891-voorbeelden tot slechts 183, maar het werkt tenminste. Tijdens de volgende run liet xCode me weten dat: "Feature \’ Ticket \ ’niet ​​van het type is (numeriek, string, array of woordenboek). \ N" dus liet ik deze kolom vallen en kreeg ik eindelijk het werkmodel:

Nogmaals, ik ben onder de indruk van het resultaat, gegevens waren relatief eenvoudig, maar het ligt dicht bij wat veel ontwikkelaars in typische apps kunnen tegenkomen. CreateML werkt, het is snel en efficiënt.

Tweede poging was de wedstrijd 'Restaurant Revenue Prediction' (https://www.kaggle.com/c/restaurant-revenue-prediction/data), waarbij het doel is om de inkomsten van het restaurant in een bepaald jaar te schatten, met behulp van de openingsdatum, stad, type restaurant etc. Hetzelfde als in het geval van Titanic, ik heb net de gegevens gedownload en speelplaats uitgevoerd:

In dit geval besloot CreateML om Boosted Tree Regressor te gebruiken en als gevolg daarvan is MSE zelfs lager dan degene die 3 jaar geleden de competitie won. Natuurlijk kan de reden hiervoor zijn dat leaderboards worden gemaakt op basis van gegevens die niet openbaar zijn, maar toch kon CreateML in enkele seconden zeer goed bouwen, waarschijnlijk zelfs vergelijkbaar met het winnende model. Dit is wat de meeste ontwikkelaars nodig hebben.

4. Voors en tegens van CreateML

Voors:

  • momenteel is het de gemakkelijkste manier om ML-modellen te bouwen voor iOS / macOS, vooral voor Proof Of Concept-apps of voor apps die met relatief eenvoudige gegevens werken
  • CreateML opent ML-wereld voor duizenden iOS / macOS-ontwikkelaars
  • is zeer efficiënt en gemakkelijk te gebruiken

nadelen:

  • zeer weinig manieren om het uiteindelijke model af te stemmen en te debuggen
  • geen publieke kennis welk model wordt gebruikt om afbeeldingen te classificeren
  • geen data preprocessing tools (maar dat is duidelijk, Apple doelwit zijn geen datawetenschappers, maar softwareontwikkelaars)

5. Mijn mening

Het lijkt erop dat CreateML echt een geweldige tool is, vooral voor ontwikkelaars, die helemaal niet met Machine Learning hebben gewerkt, het is snel, behoorlijk efficiënt en uiterst eenvoudig om mee te beginnen. Als je een iOS / macOS-ontwikkelaar bent, probeer het gewoon.

6. Open vraag

Is het probleem van grote ML-modellen voor beeldclassificatie gewoon verborgen door het feit dat alle gewichten worden opgeslagen in iOS / macOS en CreateML een CoreML-model bouwt met alleen gewichten voor de laatste, omgeschoolde laag (Inception-V3)?