[PYTHON] <Kurs> Deep Learning Day4 Stärkung des Lernens / Tensorflusses

sutudy-ai


Tiefes Lernen

Inhaltsverzeichnis [Deep Learning: Tag 1 NN] (https://qiita.com/matsukura04583/items/6317c57bc21de646da8e) [Deep Learning: Day2 CNN] (https://qiita.com/matsukura04583/items/29f0dcc3ddeca4bf69a2) [Deep Learning: Tag 3 RNN] (https://qiita.com/matsukura04583/items/9b77a238da4441e0f973) [Deep Learning: Tag 4 Stärkung des Lernens / Tensorflusses] (https://qiita.com/matsukura04583/items/50806b750c8d77f2305d)

Deep Learning: Tag 4 Stärkung des Lernens / Tensorflusses (Zusammenfassung der Vorlesung)

Abschnitt 1) TensorFlow-Implementierungsübung

Lineare Regression (DN65)

[try]

Lassen Sie uns den Wert des Rauschens ändern Lassen Sie uns die Anzahl von d ändern

スクリーンショット 2020-01-04 12.11.10.png

$ \ Rightarrow $ [Diskussion]

Optimizer name Description
GradientDescentOptimizer Optimierer durch Gradientenabstiegsmethode
AdagradOptimizer Optimierer nach AdaGrad-Methode
MomentumOptimizer Momentum-Methodenoptimierer
AdamOptimize Adam-Methode
FtrlOptimizer Folgen Sie dem Regularized Leader-Algorithmus(Ich habe das nicht gelernt)
RMSPropOptimizer Ein Algorithmus, der die Anpassung der Lernrate automatisiert

(Referenz-) Optimierer für Tensorflow

Nichtlineare Regression (DN66)

[try] Lassen Sie uns den Wert des Rauschens ändern Lassen Sie uns die Anzahl von d ändern

スクリーンショット 2020-01-04 12.43.50.png

Übung (DN67)

[try]

スクリーンショット 2020-01-04 14.36.20.png $ \ Rightarrow $ [Diskussion] Das Ergebnis war, dass das Anpassen der Lernrate effektiver war als das Anpassen von iters_num (Iterationsnummer: Anzahl der iterativen Lernvorgänge). [Quelle wechseln]

python


import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

#Ändern Sie hier die Iteration
iters_num = 10000
plot_interval = 100

#Daten generieren
n=100
#random.rand(): 0.0 oder mehr, 1.Zufällige Generierung kleiner als 0
x = np.random.rand(n).astype(np.float32) * 4 - 2
d =  30 * x ** 2 +0.5 * x + 0.2

#Rauschen hinzufügen
noise = 0.05
d = d + noise * np.random.randn(n) 

#Modell-
#Beachten Sie, dass wir nicht b verwenden.
#Hinzugefügt: Die Anzahl der Ws hat sich von 4 auf 3 geändert
#xt = tf.placeholder(tf.float32, [None, 4])
xt = tf.placeholder(tf.float32, [None, 3])
dt = tf.placeholder(tf.float32, [None, 1])
#Hinzugefügt: Die Anzahl der Ws hat sich von 4 auf 3 geändert
#W = tf.Variable(tf.random_normal([4, 1], stddev=0.01))
W = tf.Variable(tf.random_normal([3, 1], stddev=0.01))
y = tf.matmul(xt,W)

#Fehlerfunktion Durchschnittlicher quadratischer Fehler
loss = tf.reduce_mean(tf.square(y - dt))
#Ändern Sie hier die Lernrate
optimizer = tf.train.AdamOptimizer(0.001)
train = optimizer.minimize(loss)

#Initialisieren
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

#Bereiten Sie die erstellten Daten als Trainingsdaten vor
d_train = d.reshape(-1,1)
#x_train = np.zeros([n, 4])
x_train = np.zeros([n, 3])
for i in range(n):
#Hinzugefügt: Die Anzahl der Ws hat sich von 4 auf 3 geändert
#    for j in range(4):
    for j in range(3):
        x_train[i, j] = x[i]**j

#Ausbildung
for i in range(iters_num):
    if (i+1) % plot_interval == 0:
        loss_val = sess.run(loss, feed_dict={xt:x_train, dt:d_train}) 
        W_val = sess.run(W)
        print('Generation: ' + str(i+1) + '.Error= ' + str(loss_val))
    sess.run(train, feed_dict={xt:x_train,dt:d_train})

print(W_val[::-1])
    
#Vorhersagefunktion
def predict(x):
    result = 0.
#Hinzugefügt: Die Anzahl der Ws hat sich von 4 auf 3 geändert
#   for i in range(0,4):
    for i in range(0,3):
        result += W_val[i,0] * x ** i
    return result

fig = plt.figure()
subplot = fig.add_subplot(1,1,1)
plt.scatter(x ,d)
linex = np.linspace(-2,2,100)
liney = predict(linex)
subplot.plot(linex,liney)
plt.show()

MNIST1(DN68)

Klassifizierung 3 Schichten (mnist) (DN69)

[try] Lassen Sie uns die Größe der verborgenen Ebene ändern Lassen Sie uns den Optimierer ändern $ \ Rightarrow $ [Diskussion] スクリーンショット 2020-01-04 19.33.05.png Wenn die Größe der verborgenen Ebene halbiert wurde, sank die richtige Antwortrate erheblich. Wenn andererseits der Optimierer von Adam auf Momentum geändert wurde, stieg die korrekte Antwortrate von 90 auf 94%. Ich habe andere Dinge getan, aber RMS Drop war mit 96% das Beste. Ich habe versucht, die Größe der verborgenen Ebene zu verdoppeln, aber die Verbesserung der korrekten Antwortrate betrug etwa 1%. Wenn die Größe der verborgenen Ebene also tief genug war, hielt ich es für wünschenswert, sie danach mit dem Optimierer anzupassen.

Klassifizierung CNN (mnist) (DN70)

conv - relu - pool - conv - relu - pool - affin - relu - dropout - affin - softmax [try]

Lassen Sie uns die Abbrecherquote auf 0 ändern $ \ Rightarrow $ [Diskussion] (Vor Änderung) dropout_rate = 0.5 スクリーンショット 2020-01-04 19.54.24.png

(Nach Änderung) dropout_rate = 0 スクリーンショット 2020-01-04 20.02.13.png Ich dachte, es würde mehr sinken, aber es änderte sich nicht viel.

Beispielerklärung

スクリーンショット 2020-01-04 20.37.06.png

$ \ Rightarrow $ [Diskussion] Die Antwort lautet (a)

  1. googlenet ist ein Netzwerk, das aus einem Stapel von Inception-Modulen besteht.
  2. Inceptin-Modul Definieren Sie ein kleines Netzwerk in einem Modul, wie in der obigen Tabelle gezeigt. Daher ist (D) die richtige Antwort. Das Inceptin-Modul wird normalerweise dadurch gekennzeichnet, dass die Filtergröße definiert und der Teil in Convolution unter Verwendung mehrerer Filtergrößen ausgeführt wird. C, das die Abmessungen um 1x1 Faltung reduziert, ist die richtige Antwort. B ist auch richtig, da es die Ausdruckskraft verbessert und gleichzeitig die Anzahl der Parameter durch mehrere Windungen verringert.

Antwort (a) ist falsch In Bezug auf den Verlust besteht das Merkmal dieses Verlusts zunächst darin, dass die Klassifizierung in dem Teil durchgeführt wird, der in der Mitte vom Netzwerk abgezweigt ist.

Die Erläuterung der folgenden Beispiele entfällt.

[DN73] Bestätigungstest in der Erläuterung des Beispiels Beschreiben Sie kurz die Funktionen von VGG, GoogleNet und ResNet.

Für VGG wird es das älteste Modell von 2014 sein. Als Feature ist es einfach, einfache Netzwerke wie Convolution, Convolution, max_pool zu stapeln. Andererseits zeichnet es sich durch eine große Anzahl von Parametern im Vergleich zu den beiden anderen aus. Die Funktion von Google Net besteht darin, dass das Inception-Modul verwendet wird. Es zeichnet sich durch Dimensionsreduzierung bei Verwendung von 1✖️1 Größe und Spärlichkeit bei Verwendung verschiedener Filtergrößen aus. In Bezug auf ResNet wird <Verbindungsidentitätsmodul überspringen verwendet, um eine Restverbindung herzustellen, die tiefes Lernen ermöglicht.

Keras2 (DN69)

Einfaches Perceptron

ODER-Schaltung [try] Np.random.seed (0) wurde in np.random.seed (1) geändert. Die Anzahl der Epochen wurde auf 100 geändert Geändert zu UND-Schaltung und XOR-Schaltung Ändern Sie die Chargengröße mit der ODER-Schaltung auf 10 Ändern wir die Anzahl der Epochen auf 300 ⇒ [Diskussion] (Vor Änderung) np.random.seed (0) スクリーンショット 2020-01-04 22.40.41.png (Nach Änderung) Geändert zu np.random.seed (1) スクリーンショット 2020-01-04 22.49.46.png (Nach Änderung) Die Epoche wurde von 30 auf 100 Mal geändert スクリーンショット 2020-01-04 22.58.35.png (Nach dem Wechsel) Wechseln Sie in die UND-Schaltung OR und AND können linear getrennt werden, aber XOR kann nicht gelernt werden, da es nicht linear getrennt werden kann. (Nach dem Wechsel) Ändern Sie die Chargengröße mit der ODER-Schaltung auf 10 スクリーンショット 2020-01-04 23.22.23.png (Nach der Änderung) Ändern wir die Anzahl der Epochen auf 300 スクリーンショット 2020-01-04 23.24.53.png

Klassifikation (Iris)

[try]

(Vor Änderung / ReLU) スクリーンショット 2020-01-04 23.38.52.png (Aktivierungsfunktion in Sygmoid geändert) スクリーンショット 2020-01-05 0.40.44.png Aus der Grafik geht schließlich hervor, dass ReRU genauer ist. (Geänderte Optimierung in Optimierer = SGD (lr = 0,1)) スクリーンショット 2020-01-05 0.53.14.png

Mit Optimierer = SGD (lr = 0,1) gibt es einige Bereiche, in denen sich die Genauigkeit verbessert hat, sodass gelegentlich 1,0 angezeigt wird, aber es scheint, dass es mehr Variationen gibt.

Klassifizierung (mnist)

[try]

(Vorher ändern) スクリーンショット 2020-01-05 1.17.45.png (Nach Änderung) Ändern Sie one_hot_label in False スクリーンショット 2020-01-05 4.51.25.png

(Nach Änderung) Ändern Sie die Fehlerfunktion in sparse_categorical_crossentropy Und ändern Sie one_hot_label in False スクリーンショット 2020-01-05 5.04.45.png

kategoriale_kreuzentropie → setze one_hot_label auf True sparse_categorical_crossentropy → Fales one_hot_label Muss sein. Andernfalls tritt ein Fehler auf.

(Nach Änderung) Ändern wir den Wert von Adams lr-Argument (Lernrate 0,01-> 0,1). スクリーンショット 2020-01-05 5.10.06.png

RNN (Vorhersage der binären Addition) Keras RNN-Dokumentation

[try] (Vorher ändern) スクリーンショット 2020-01-07 15.54.14.png (Nach Änderung) Ändern Sie die Anzahl der Ausgabeknoten auf 128 Geänderte SimpleRNN-Einheiten = 16 $ \ Rightarrow $ -Einheiten = 128. スクリーンショット 2020-01-07 16.07.28.png Es ist von der Stufe von EPOCH1 auf Acc 0.9299 gestiegen. (Nach Änderung) Die Ausgabeaktivierungsfunktion wurde in ReLU $ \ Rightarrow $ sigmoid geändert スクリーンショット 2020-01-07 16.21.14.png Das Ergebnis von Sygmoid ist, dass Acc nicht so stark ansteigt wie LeRU. (Nach Änderung) Ändern Sie die Ausgangsaktivierungsfunktion in tanh スクリーンショット 2020-01-07 16.33.54.png Es dauert bis zu Epoche 3, obwohl Acc bis zu 100% beträgt.

(Nach Änderung) Ändern Sie die Optimierungsmethode in Adam Quellenänderung

pyton


#model.compile(loss='mean_squared_error', optimizer=SGD(lr=0.1), metrics=['accuracy'])
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])

スクリーンショット 2020-01-07 17.09.49.png Acc ist fast ein gutes Ergebnis.

(Nach Änderung) Input Dropout auf 0,5 eingestellt スクリーンショット 2020-01-07 16.41.19.png Das Ergebnis, dass Acc nicht so stark steigt wie erwartet.

(Nach Änderung) Setzen Sie rekursives Dropout auf 0,3 スクリーンショット 2020-01-07 16.53.33.png Dies ist auch nur Acc 98%.

(Nach Änderung) Unroll auf True setzen スクリーンショット 2020-01-07 17.15.36.png Dies ist auch ein gutes Ergebnis.

Abschnitt 2) Stärkung des Lernens

2-1 Was ist Bestärkungslernen?

Ein Bereich des maschinellen Lernens, der darauf abzielt, Agenten zu erstellen, die Aktionen in der Umgebung auswählen können, damit die Belohnungen langfristig maximiert werden können. $ \ Rightarrow $ Dies ist ein Mechanismus zur Verbesserung des Prinzips der Entscheidung einer Aktion auf der Grundlage des Gewinns (der Belohnung), der als Ergebnis der Aktion erzielt wird.

[D81] Stärkung des Lernens 1 Bestätigungstest Betrachten Sie Beispiele, die auf das Lernen zur Stärkung angewendet werden könnten, und listen Sie Umweltfaktoren, Maßnahmen und Belohnungen auf.

⇒ [Diskussion] Aktieninvestitionsroboter Umwelt ⇒ Börse Agent ⇒ Investor Maßnahme ⇒ Wählen Sie Aktien aus und investieren Sie in diese, die wahrscheinlich rentabel sind Belohnung ⇒ Gewinn / Verlust aus dem Kauf und Verkauf von Aktien

2-2 Anwendungsbeispiel für Bestärkungslernen

Für das Marketing Umwelt: Abteilung für Verkaufsförderung des Unternehmens Agent: Kampagnen-E-Mail basierend auf Profil und Kaufhistorie Es ist eine Software, die den Kunden zum Senden entscheidet. Aktion: Sie müssen für jeden Kunden zwischen sendenden und nicht sendenden Aktionen wählen. Belohnung: Negative Belohnung der Kampagnenkosten und erstellt von der Kampagne Erhalten Sie eine positive Belohnung für Verkäufe, die voraussichtlich getätigt werden

2-3 Kompromiss zwischen Suche und Verwendung

Mit perfekter Kenntnis der Umgebung im Voraus ist es möglich, ein optimales Verhalten vorherzusagen und zu bestimmen.
⇒ Situation, in der bekannt ist, welche Art von Kunde eine Kampagnen-E-Mail senden soll und welche Maßnahmen ergriffen werden.
⇒ Bei intensivem Lernen gilt die obige Annahme nicht. Sammeln Sie Daten, während Sie auf der Grundlage unvollständigen Wissens handeln. Finde die beste Aktion.

Wenn Sie in den vergangenen Daten immer nur das beste Verhalten verwenden, können Sie das beste andere Verhalten nicht finden. ⇒ Unzureichende Suche (Obere und untere sind Kompromissbeziehungen) Wenn Sie weiterhin nur unbekannte Maßnahmen ergreifen, können Sie Ihre bisherigen Erfahrungen nicht nutzen. Unzureichende Nutzung Kompromissbeziehung ⇒ Nur unbekannte Höhe

2-4 Bild des verstärkenden Lernens

Day4.jpg

2-5 Unterschied beim Lernen zur Stärkung

Unterschiede zwischen verbessertem Lernen und regelmäßig unterrichtetem und unbeaufsichtigtem Lernen

Fazit: unterschiedliche Ziele

Geschichte des verbesserten Lernens Über das Lernen der Verstärkung ・ Obwohl es eine Winterära gab, wird es aufgrund des Fortschritts der Berechnungsgeschwindigkeit möglich, intensives Lernen durchzuführen, wenn es einen großräumigen Zustand aufweist. ・ Darstellung einer Methode, die Funktionsnäherungsmethode und Q-Lernen kombiniert

Q Lernen ・ So fahren Sie mit dem Lernen fort, indem Sie die Aktionswertfunktion jedes Mal aktualisieren, wenn Sie eine Aktion ausführen Funktionsnäherungsmethode ・ Eine Methode zur Funktionsnäherung an Wertfunktionen und Richtlinienfunktionen

2-6 Aktionswertfunktion

Was ist eine Aktionswertfunktion?

2-7 Richtlinienfunktion

Eine Richtlinienfunktion ist eine Funktion, die die Wahrscheinlichkeit angibt, welche Maßnahmen in einem bestimmten Zustand in einer auf Richtlinien basierenden Lernmethode zur Verstärkung ergriffen werden müssen.

2-8 Richtliniengradientenmethode

Methode zur Wiederholung von Richtlinien Techniken zur Modellierung und Optimierung von Strategien ⇒ Richtliniengradientenmethode

\theta^{(t+1)}=\theta^{(t)}\epsilon\nabla j(\theta)

Was ist j? ⇒ Gute Politik ... Muss definiert werden

Definitionsmethode ・ Durchschnittliche Belohnung ・ Rabattbelohnungssumme Entsprechend der obigen Definition wird die Aktionswertfunktion: Q (s, a) definiert. Der Satz des politischen Gradienten gilt.

\nabla _{\theta} j(\theta)=E_{\pi_\theta} [\nabla_{\theta} log\pi_\theta(a|s)Q^\pi(s,a))]

Recommended Posts

<Kurs> Deep Learning Day4 Stärkung des Lernens / Tensorflusses
<Kurs> Tiefes Lernen: Day2 CNN
<Kurs> Tiefes Lernen: Tag 1 NN
Themen> Deep Learning: Tag 3 RNN
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
Deep Strengthing Learning 3 Praktische Ausgabe: Block Breaking
Studiere gründlich Deep Learning [DW Tag 0]
Lerne beim Machen! Tiefes Verstärkungslernen_1
Tiefes Lernen
Anfänger des maschinellen Lernens nehmen an Courseras Deep Learning-Kurs teil
[Rabbit Challenge (E-Qualifikation)] Deep Learning (Tag 2)
Verbessertes Lernen, um von null bis tief zu lernen
[Rabbit Challenge (E-Qualifikation)] Deep Learning (Tag 3)
[Rabbit Challenge (E-Qualifikation)] Deep Learning (Tag 4)
[Einführung] Stärkung des Lernens
Deep Learning Memorandum
Starten Sie Deep Learning
Python-Lerntag 4
Zukünftiges Verstärkungslernen_2
Zukünftiges Verstärkungslernen_1
Python Deep Learning
Deep Learning × Python
Aktieninvestitionen durch tiefgreifendes Lernen (Policy Gradient Method) (1)
Deep Learning Kurs, der vor Ort zerquetscht werden kann
Erstes tiefes Lernen ~ Kampf ~
Python: Deep Learning-Praxis
Deep Learning / Aktivierungsfunktionen
Deep Learning von Grund auf neu
Lernrekord 4 (8. Tag)
Lernrekord 9 (13. Tag)
Lernrekord 3 (7. Tag)
Deep Learning 1 Übung des Deep Learning
Stärkung des Lernens der dritten Zeile
Deep Learning / Cross Entropy
Lernrekord 5 (9. Tag)
Lernrekord 6 (10. Tag)
Erstes tiefes Lernen ~ Vorbereitung ~
Programmieren des Lernprotokolls 2. Tag
Erstes tiefes Lernen ~ Lösung ~
Lernrekord 8 (12. Tag)
[AI] Deep Metric Learning
Lernrekord 1 (4. Tag)
Lernrekord 7 (11. Tag)
Ich habe versucht, tief zu lernen
Memo zum Kurs für maschinelles Lernen
[Lernen stärken] Banditenaufgabe
Python: Deep Learning Tuning
Lernrekord 2 (6. Tag)
Deep Learning Großtechnologie
Python + Unity Enhanced Learning (Lernen)
Lernrekord 16 (20. Tag)
Lernrekord 22 (26. Tag)
Stärkung des Lernens 1 Einführungsausgabe
Deep Learning / Softmax-Funktion
[Deep Learning] Bildklassifizierung mit Faltungsnetz [DW Tag 4]
Selbstgesteuertes Lied durch tiefes Lernen (gestapelte LSTM-Ausgabe) [DW Tag 6]