Wpis z mikrobloga

#machinelearning #sztucznainteligencja

Standardowy proces w pisaniu aplikacji, która korzysta z machine learningu, to:
1. Mamy zbiór danych treningowych/testowych i uczymy model.
2. W aplikacji korzystamy z gotowej wytrenowanej sieci, żeby przetwarzać nowe dane.
Tak widzę w tutorialach i tak w najłatwiejszych użyciach, gdzie ML jest używane w rzeczywistych systemach.

Z tym, że biznesowo proces wygląda tak (i biznes oczekuje raczej tego):
- Jest proces, który wykonują ludzie.
- Chcemy użyć ML, żeby na podstawie początkowych danych sieć się trochę nauczyła.
- Na wyuczonym modelu, żeby robiła to samo co robili ludzie. Ale w przypadkach niepewności sieci, żeby ludzie dalej robili to ręcznie (poprawiali).
- Na podstawie tego co robią ludzie (poprawki), żeby sieć się uczyła i robiła to lepiej.

Macie jakiś tutorial, przykłady, w których będzie to zastosowane, żeby dorzucać dane do uczenia w trakcie? Bo w tych standardowych, prostych tutorialch jest: wytrenuj sieć, a potem z niej korzystaj. Co z dotrenowaniem sieci? Nie chcę jakiś mega skomplikowanych rozwiązań (jestem początkującym w ML).

Czy ma to związek z "online machine learning"? A może po prostu tak jak trenuję danymi początkowymi tak można dorzucić dane i wytrenować jeszcze raz, dlatego nie ma tego w tutorialach, bo jest banalne?
  • 8
  • Odpowiedz
@mk321: Szukasz czegoś co się nazywa transfer learning, ładujesz starą sieć i douczasz na nowych danych. Jeżeli chodzi o inne algorytmy np. GBT to trzeba uczyć od zera dorzucając dane.
  • Odpowiedz
@haka65: o transfer learning słyszałem w kontekście, że masz sieć nauczoną do jednego zastosowania, a bierzesz go do drugiego.

Przykładowo popularne jest:
- bierzesz wytrenowaną sieć na obrazkach z ImageNet (sam nie byłbyś w stanie tak dobrze wytrenować),
- ale ona rozpoznaje ogólne kategorie obrazków (np. kot, pies, samochód), a ty chcesz jakiś konkretny rodzaj np. marki samochodów (tego w tej sieci nie ma)
- dorzucasz więc swoje obrazki (marki samochodów)
  • Odpowiedz
Jeżeli chodzi o inne algorytmy np. GBT to trzeba uczyć od zera dorzucając dane.


@haka65: czyli zależy od konkretnego algorytmu czy się da? Da się jakoś łatwo to rozpoznać?

Czyli jak się nie da to mogę robić tak, że zbierać dane i np. raz dziennie/tygodniowo uczyć sieć od nowa i podrzucać na produkcję nowy model. Ale widzę dwie wady:
- może to trwać długo (uczenie sieci trwa długi i im więcej
  • Odpowiedz
@mk321: A jaki masz typ problemu? Dane w tabelce? Obrazki? Tekst? Jak tabelka to możesz uczyć od nowa. My często robimy tak, że odświeżamy model co 3 miesiące/pół roku ale mamy raczej duży system (w tej chwili 80+ modeli) - częściej nie ma raczej sensu.

A co do GBT - nie ma to raczej sensu, bo douczanie polegałoby na dodaniu nowych drzew i miałbyś gigantyczny overfitting po jakimś czasie.
  • Odpowiedz
@haka65: dane tekstowe (wyszukiwanie w tekście z OCR z kopert: adresów tzn. wyciąganie ulicy, nr. domu itp, oraz nazw firm, adresatów, dopasowywanie do słowników). Nie bardzo chce uczyć od nowa, bo chciałbym, żeby po wyklikaniu przez użytkownika następną bardzo podobną rzecz już samo rozpoznało. Na początku jak będzie bardzo mało danych treningowych, to praktycznie wszystko będą robili użytkownicy, a potem ML ma się uczyć na bieżąco (a nie po pół roku
  • Odpowiedz
@mk321: Czyli jednak transfer learning, w przypadku jak masz jeszcze mało danych to warto uczyć od początku. Po prostu bierzesz starą sieć i douczasz na tym samym/trochę mniejszym learning rate - możesz sobie zrobić taki automatyczny proces, który doucza sieć na produkcji, zapisuje i porównuje przed i po z jakimś wcześniej wydzielonym zbiorem testowym (jeżeli to problem, w którym można go dobrze zdefiniować i zadać jakąś metrykę wyboru).
  • Odpowiedz
Szukasz czegoś co się nazywa transfer learning, ładujesz starą sieć i douczasz na nowych danych.


@haka65: chłopie co ty #!$%@? xD
Nie znasz się to się nie wypowiadaj.

Czy ma to związek z "online machine learning"?


@mk321: dokładnie tego szukasz, po prostu sobie zbieraj przykłady na których model zawiódł, dorzucaj je do zbioru którego używałeś do uczenia i cyklicznie trenuj. Ważne jest to żeby dołączać te błędy do oryginalnego datasetu,
  • Odpowiedz