Slide 1

Slide 1 text

θϩ͔Β࡞ΔDEEP LEARNING 2 ࣗવݴޠฤ ಡॻձ ୈ8ճ

Slide 2

Slide 2 text

ࣗݾ঺հ • ߐ઒௚ๆ (Naomine, Egawa) / ؾ͍ͮͨΒ 40 ୅ / 1ࣇͷύύ • େֶࡏֶதʹΞϧόΠτͰ IT ͷੈքʹɻԼ੥͚։ൃɺϑϦʔϥϯεͳͲΛ ܦͯɺݱࡏ͸ Amazon Web Service Japan ʹͯ Technical Account Manager ͱ͍͏ϩʔϧʹैࣄɻ • ͜͜࠷ۙͰ࢖͍ͬͯΔ΋ͷ͸ɺAWS, Docker, JavaʢStruts2...ʣ • AI ΋σʔλαΠΤϯε΋ະܦݧɻຊॻͷᶃΛಡΜͰ Deep Learning ͷ໘ന ͞ʹ໨֮ΊɺG ݕఆΛऔΔͳͲ͢Δɻ • ࠷ۙϋϚͬͨ΋ͷ͸ Amazon Prime Video ͷ "Ϗοάόϯ˒ηΦϦʔ" 2

Slide 3

Slide 3 text

͜ͷεϥΠυ͸ • 4 ষͷલ൒ʢ4.1~4.2ʣΛಡΜͰࣗ෼͕ཧղͨ͜͠ͱͷαϚϦͰ͢ɻ • 4 ষ word2vec ͷߴ଎Խ • 4.1 word2vec ͷվྑᶃ • 4.2 word2vec ͷվྑᶄ • ϖʔδͰݴ͏ͱ 131 ʙ 160 Ͱ͢ɻ • ຊʹॻ͍͍ͯͳ͍࿩͸͋·Γͳ͍Ͱ͢ɻ 3

Slide 4

Slide 4 text

3 ষͷ໰୊఺ • ίʔύεͷޠኮ਺͕૿͑Δͱܭࢉ͕ݱ࣮తͰ͸ͳ͘ͳΔ
 ۩ମతʹ͸ҎԼͷ 2 Օॴ͕ϘτϧωοΫͱͳΔ • ೖྗ૚ͷ one-hot දݱͱॏΈߦྻ Win ͷੵͷܭࢉ
 ˠ 4.1 અͰղܾ • தؒ૚ͱॏΈߦྻ Wout ͷੵ͓Αͼ Softmax ϨΠϠͷܭࢉ
 ˠ 4.2 અͰղܾ 4

Slide 5

Slide 5 text

4.1 EMBEDDING ϨΠϠ • ޠኮ਺͕૿͑Δͱ one-hot දݱͷϕΫτϧαΠζ͕૿͑Δ • ྫ͑͹ޠኮ਺͕ 100 ສͰதؒ૚ͷχϡʔϩϯΛ 100 ͱ͢Δͱɺೖྗ ૚ͷ one-hot දݱͱॏΈߦྻ Win ͷੵ͸ҎԼͷΑ͏ʹͳΔ
 C (1 x 100ສ) dot Win (100ສ x 100) • ܭࢉྔͱͯ͠͸ O(n) 5

Slide 6

Slide 6 text

• ࢼ͠ʹ Python ͷϓϩϑΝΠϥͰ CPU ࣌ؒͱϝϞϦྔΛݟͯΈ Δɻ • αϯϓϧίʔυ͸ 3 ষͷ࣮૷Λ؆ ུԽͨ͠΋ͷɻ • ʢࢀߟʣwin ͷॳظԽͰϝϞϦΛ ࢖͍ͬͯΔ͕ɺ͜͜܁Γฦ࣮͠ߦ ͞Εͳ͍ͷͰແࢹ • ʢࢀߟʣdot ͰϝϞϦ͸૿͍͑ͯ ͳ͍ɻh ͕খ͍͔͞Β͔ʁ • dot ͷ CPU ͕࣌ؒ 84,674 φϊඵ 6

Slide 7

Slide 7 text

EMBEDDING ϨΠϠͱ͸ • one-hot ϕΫτϧͱ Win ͷੵ͸ɺܕ௨Γʹܭࢉͨ͠Βେม͚ͩͲཁ͢ ΔʹɺWin ͔ΒಛఆͷߦΛൈ͖ग़͍ͯ͠Δ͚ͩɻ
 P.135 ͷਤ • ͳͷͰɺWin ͔Β୯ޠ ID ʹ֘౰͢ΔߦΛൈ͖ग़࣮͢૷ʹ͢Ε͹ߴ଎ Խ͞ΕΔɻ͜ͷॲཧΛߦ͏ϨΠϠΛ Embedding ϨΠϠͱ໊෇͚Δɻ • Embedding ͱ͸ɺ୯ޠͷຒΊࠐΈʢword embeddingʣʹ༝དྷͯ͠ ͍ΔɻWin ͔Β୯ޠ ID ʹ֘౰͢ΔߦΛൈ͖ग़͢͜ͱ͸ɺ୯ޠͷີͳ ϕΫτϧදݱΛऔಘ͢Δ͜ͱͱಉ͡Ͱ͋Γɺ୯ޠͷີͳϕΫτϧදݱ Λࣗવݴޠॲཧͷ෼໺Ͱ͸୯ޠͷຒΊࠐΈͱݺͿͨΊɻ 7

Slide 8

Slide 8 text

NUMPY ʹΑΔ࣮૷ • W[2] ΍ W[5] ͷΑ͏ʹ഑ྻͷΠϯσοΫεͷΑ͏ʹऔΔ͚ͩͰߦ͕ ൈ͖ग़ͤΔɻ • idx = np.array([1, 0, 3, 0])
 W[idx] ͱ͢Ε͹ɺෳ਺ͷߦΛ·ͱΊͯൈ͖ग़͢͜ͱ΋Ͱ͖Δɻ
 ˞ϛχόον࣮ߦΛ૝ఆ 8

Slide 9

Slide 9 text

• dot Λ [] ʹஔ͖׵͑ͯ࠶౓ϓϩ ϑΝΠϧΛऔͬͯΈͨɻ • 8 φϊඵʹͳͬͨɻ
 dot ͱൺֱͯ͠ 5 ܻͷߴ଎Խɻ • ʢࢀߟʣ؀ڥ͸ AWS ͷ m5.large (vCPU x 2 / Memory 8GB / GPU ͳ͠) • ʢࢀߟʣܭࢉྔͱͯ͠͸ O(n) ͕ O(1) ʹͳͬͨɻ 9

Slide 10

Slide 10 text

FORWARD ͱ BACKWARD • ୯ޠ ID ͷϦετΛ self.idx ʹ഑ྻͰड͚औΔ࢓༷ͱ͢Δɻ • forward ͸͜͜·Ͱઆ໌ͨ͠ͱ͓ΓॏΈ͔ΒߦΛൈ͖ग़͚ͩ͢ɻ
 P.137 ͷਤ • def forward(self, idx):
 W, = self.params
 self.idx = idx
 out = W[idx]
 return out 10

Slide 11

Slide 11 text

• backward ͸ forward ͕ॏΈΛൈ͖ग़͚ͩ͢ͳͷͰɺޯ഑ʢdoutʣΛલͷ ૚ʹ໭͚ͩ͢ɻ
 dW ͷܗঢ়͸ม͑ͣʹɺશͯͷཁૉΛ 0 ʹ͔ͯ͠Βൈ͖ग़ͨ͠ͱ͜Ζʹޯ ഑Ληοτ͢Δɻ
 P.137 ͷਤ • def backward(self, dout):
 dW, = self.grads
 dW[...] = 0
 dW[self.idx] = dout
 return None • طʹ࣮૷͍ͯ͠Δ Optimizer ͱͷޓ׵ੑͷͨΊʹ dW ͸ W ͱಉ͡ܗঢ়ʹ ͍ͯ͠Δ͕ɺϝϞϦྔΛߟ͑Ε͹ idx ͱ dout Λอ͓͚࣋ͯͩ͘͠ͰΑ͍ɻ 11

Slide 12

Slide 12 text

• backword ͷ࣮૷͸ɺ࣮͸͜ΕͰ͸μϝɻ • idx ʹॏෳ͕͋ͬͨ৔߹ɺطʹೖ͍ͬͯΔ஋্͕ॻ͖͞Εͯ͠·͏ɻ
 P.138 ͷਤ • ਖ਼ղ͸ɺidx ͕ࣔ͢ͱ͜Ζʹطʹ஋͕͋Ε͹ɺՃࢉ͢Δɻ
 "ͳͥՃࢉΛߦ͏͔͸ɺ֤ࣗͰߟ͑ͯΈ·͠ΐ͏" → ͦͷॏΈͷ߲͕ෳ਺͋ Δ͜ͱͱಉ͔ͩ͡Β • def backward(self, dout):
 dW, = self.grads
 dW[...] = 0
 for i, word_id in enumerate(self.idx):
 dW[word_id] += dout[i]
 return None 12

Slide 13

Slide 13 text

൪֎ฤ • Python ͷ for loop ΑΓ Numpy ͷ૊ΈࠐΈϝ ιουͷ΄͏͕଎͍ɺͱ ॻ͔Ε͍ͯΔͷͰɺͪ͜ Β΋ܭଌͯ͠ΈΑ͏ɻ • 1 ສճͷ loop Λൺֱ͠ ͯΈΔɻ • 8,689+15,091 φϊඵ͕ 1,694 φϊඵʹͳͬͨɻ 13

Slide 14

Slide 14 text

4.2 NEGATIVE SAMPLING • ޠኮ਺͕ 100 ສɺதؒ૚ͷχϡʔϩϯ਺͕ 100 ͷͱ͖ɺதؒ૚ͱॏ Έ Wout ͷੵ͸ҎԼͷΑ͏ʹͳΔɻ
 h (1 x 100) dot Wout (100 x 100ສ) • Softmax ϨΠϠͷܭࢉ͸ҎԼͷΑ͏ʹͳΔɻ
 exp(Sk ) ÷ Σ(i=1...100ສ) exp(Si )
 ※ k ൪໨ͷཁૉʢ୯ޠʣͷܭࢉࣜ • ͲͪΒ΋ܭࢉྔͱͯ͠͸ O(n) 14

Slide 15

Slide 15 text

• ͦ͜Ͱɺѻ͏໰୊Λଟ߲෼ྨ͔Βೋ஋෼ྨ΁มߋ͢Δɻ • ͜Ε·Ͱ͸ɺʮίϯςΩετͱͯ͠ 2 ͭͷ୯ޠΛ༩͑ͨͱ͖ʹɺͦͷؒʹ͘ Δ୯ޠ͸ͲΕͰ͠ΐ͏ʁʯͱ͍͏ɺෳ਺ͷબ୒ࢶͷத͔Β 1 ͭΛબͼग़͢໰ ୊ͩͬͨɻ
 ˠ ଟ߲෼ྨ • ͜ΕΛɺʮίϯςΩετͱͯ͠ 2 ͭͷ୯ޠΛ༩͑ͨͱ͖ʹɺͦͷؒʹ͘Δ୯ ޠ͸͜ΕͰ͔͢ʁʯͱ͍͏ɺYes/No Ͱ౴͑ΒΕΔ໰୊ʹ͢Δɻ
 ˠ ೋ஋෼ྨ • ೋ஋෼ྨͰ͋Ε͹ɺޠኮͷ਺͚ͩ͋Δग़ྗ૚͔Βਖ਼ղͰ͋Δ୯ޠ 1 ͭʹର͢ ΔείΞΛֶश͢Ε͹Α͍ͷͰɺଞͷ୯ޠͷܭࢉΛল͘͜ͱ͕Ͱ͖Δɻ
 P.143 ͷਤ 15

Slide 16

Slide 16 text

• ೋ஋෼ྨͳͷͰɺग़ྗ૚ʹ͸γάϞΠυؔ਺Λ࢖͏ɻ • ଟ߲෼ྨͰ͸ɺਖ਼ղͷ୯ޠͷείΞΛ্͛Δͱಉ࣌ʹɺෆਖ਼ղͷ୯ޠͷείΞΛԼ͛Δ Α͏ʹֶश͠ͳ͚Ε͹ͳΒͳ͍ͷͰɺιϑτϚοΫεؔ਺Λ࢖͏ඞཁ͕͋ͬͨɻೋ߲෼ ྨͰ͸ 1 ͭͷ୯ޠͷείΞ͕ਖ਼֬ʹͳΔΑ͏ʹֶश͢Ε͹Α͍ͷͰɺ1 ͭͷ୯ޠͷεί ΞΛಘΒΕΔؔ਺Ͱ͋Ε͹Α͍ɻ • ࠓճγάϞΠυؔ਺Λ࢖͏ཧ༝͸ɺ֬཰ͱΈͳͤΔͨΊɻ • ଛࣦؔ਺ʹ͸ަࠩΤϯτϩϐʔޡࠩΛ࢖͏ɻʢݱঢ়͔Βมߋͳ͠ʣ • ιϑτϚοΫεͷ৔߹ͱͰަࠩΤϯτϩϐʔޡࠩͷ͕ࣜҟͳΔ͕ɺଟ߲෼ྨͷग़ྗ૚ ʹ̎ͭͷʢyes/noΛද͢ʣχϡʔϩϯΛࢦఆͨ͠৔߹͸̎ͭͷ͕ࣜ׬શʹҰக͢Δɻ
 L = - Σ tk log yk ɾɾɾ (1.7) ɹP.20
 L = - (t log(y) + (1 - t) log (1 -y)) ɾɾɾ (4.3) ɹP.145
 ଟ߲෼ྨ͸ yes/no ͲͪΒ΋ 1 ʹऩଋͤ͞ΔͷͰ߲Λ෼͚Δඞཁ͕ͳ͍ɻ
 ιϑτϚοΫε͔ͩΒͲͪΒ͔̍ͭͷχϡʔϩϯͷޡࠩΛݟΔ͚ͩͰྑ͍ɻˡ ࣗ৴͸ͳ͍ɻ 16

Slide 17

Slide 17 text

NUMPY ʹΑΔ࣮૷ • ॏΈ Wout ͔Β୯ޠ ID ʹ֘౰͢ΔϕΫτϧΛऔΓग़͠ɺதؒ૚ͷ χϡʔϩϯ h ͱͷੵΛܭࢉ͢Δɻ
 h (1 x 100) dot Wout(i) (100 x 1) • ຊॻͰ͸ɺEmbedding ϨΠϠΛ࢖͍·Θ͍ͯ͠Δɻ
 ˞ Wout ͷߦྻ͕࣮૷Ͱ͸ೖΕସΘΔ͜ͱʹͳΔͷͰίʔυΛಡΉͱ ͖ʹ஫ҙ͢Δɻ • Embedding ϨΠϠͱ h ͱͷੵΛ·ͱΊͯߦ͏ Embedding Dot ϨΠ ϠΛ࡞Δɻ 17

Slide 18

Slide 18 text

FORWARD ͱ BACKWARD • Embedding ϨΠϠΛ࢖͍ճؔ͢܎Ͱɺh ͱ Wout ͔Βൈ͖ग़ͨ͠ϕ Ϋτϧͷ shape ͕ಉ͡ʹͳΔͨΊɺdot Ͱ͸ͳ͘ * ͱ sum Ͱ಺ੵΛ ܭࢉ͍ͯ͠Δɻ • target_W = self.embed.forward(idx)
 out = np.sum(target_W * h, axis=1) 18

Slide 19

Slide 19 text

• backward ͸ "֤ࣗͰߟ͑ͯΈ·͠ΐ͏" ͱ͍͏͜ͱͰɺߟ͑ͯΈΔɻ MutMul ͷ backward ͰΑ͍͸ͣɻ • MutMul ͷ backward ͸ɺҎԼͷΑ͏ʹఆٛ͞ΕΔɻP.33
 y = x dot W ͷͱ͖ɺbackward ͸
 dx = dy dot Wt
 dW = xt dot dy • ࠓճ forward ͸ҎԼͷΑ͏ʹͳ͍ͬͯΔ͔Βɺ
 y (1 x 1) = h (1 x 100) dot Wout(i) (100 x 1) • backward ͸ҎԼͷͱ͓Γɻ
 dh = dy dot Wout(i) t 
 dW = ht dot dy 19

Slide 20

Slide 20 text

• ߦྻͱͯ͠ shape Λॻ͖Ճ͑ͯΈΔͱ
 dh (1 x 100) = dy (1 x 1) dot Wout(i) t (1 x 100)
 dW (100 x 1) = ht (100 x 1) dot dy (1 x 1) • ͨͩࠓճͷ࣮૷Ͱ͸ h ͕طʹ Embedding ϨΠϠʹΑͬͯϕΫτϧʹ ͳ͍ͬͯΔ͠ɺWout(i) ΋ಉ༷ʹϕΫτϧ͔ͭཁૉ਺͸౳͍͠ͷͰɺҎ ԼͷΑ͏ʹॻ͖௚ͤΔɻ
 dh = dy (εΧϥ) * Wout(i)
 dW = h * dy (εΧϥ) • ͱ͍͏Θ͚ͰҎԼͷΑ͏ͳ࣮૷ʹͳ͍ͬͯΔɻP.150
 dtarget_W = dout * h
 dh = dout * target_W 20

Slide 21

Slide 21 text

͜͜·Ͱͷ໰୊఺ • ਖ਼ղ͚ͩͰͳ͘ɺෆਖ਼ղ΋ֶश͠ͳ͚Ε͹ͳΒͳ͍ɻ • ʮyouʯͱʮgoodbyeʯΛ༩͑ͨͱ͖ʹਖ਼ղʢਖ਼ྫʣͷʮsayʯͷείΞ͕ 1 ʹۙͮ ͘ͱಉ࣌ʹɺʮyouʯͱʮgoodbyeʯΛ༩͑ͨͱ͖ʹෆਖ਼ղʢෛྫʣͷʮhelloʯͷ είΞ͕ 0 ʹۙͮ͘Α͏ͳॏΈΛٻΊͳ͚Ε͹ͳΒͳ͍ɻ • ͱ͸͍͑ɺશͯͷෛྫΛֶश͢ΔͷͰ͸ޠኮʹԠͯ͡ܭࢉྔ͕૿͑ͯ͠·͍ɺ͜ͷ ষͷ໨తʹ͙ͦΘͳ͍ɻ • ͦ͜Ͱɺෛྫʹ͍ͭͯ͸̑ݸͱ͔̍̌ݸͱ͔ϐοΫΞοϓͯ͠ɺͦΕΛֶशʹ༻͍Δ ͜ͱʹ͢Δɻ
 P.154 ͷਤ • ͜Ε͕ Negative Sampling ͷҙຯɻ 21

Slide 22

Slide 22 text

αϯϓϦϯάͷख๏ • ෛྫΛͲͷΑ͏ʹαϯϓϦϯά͢Δ͔ʁ • ϥϯμϜʹαϓϦϯά͢ΔΑΓɺίʔύε಺ͰΑ͘࢖ΘΕΔ୯ޠΛ༻͍ͨ΄͏ ͕ྑ͍͜ͱ͕஌ΒΕ͍ͯΔɻ • ίʔύεͷग़ݱճ਺ΛϥϯμϜʹબग़͢Δࡍͷ֬཰෼෍ͱͯ͠༻͍Δɻྫ͑͹ શͯͷ୯ޠͷग़ݱճ਺͕ 100 ͋Γɺ͋Δ̍ͭͷ୯ޠ͕ 25 ճग़ݱ͍ͯͨ͠Βɺ ͦͷ୯ޠ͕બ͹ΕΔ֬཰Λ 25% ʹ͍ͨ͠ɻ • ͞Βʹͻͱखؒɻ֬཰ͷ௿͍୯ޠͷ֬཰Λগ͚ͩ͋͛ͯ͠΍ΔɻͦͷͨΊɺ֤ ୯ޠͷग़ݱ֬཰Λ 0.75 ৐ͯ͋͛͠Δɻ
 P'(wi ) = P(wi )0.75 ÷ Σ(j=1...n) P(wj )0.75 • 0.75ʹཧ࿦తͳࠜڌ͸ͳ͘ɺ஋Λม͑ͯ΋ྑ͍ɻ 22

Slide 23

Slide 23 text

• 0.75 ৐͢ΔΠϝʔδ • ࣮૷͸ UnigramSampler Ϋϥεʹ·ͱΊΒΕ͍ͯΔɻʢলུʣ 23

Slide 24

Slide 24 text

NEGATIVE SAMPLING ͷ࣮૷ • ෛྫͷαϯϓϧ਺͸ self.sample_size ͰܾΊΔ • EmbeddingDot ϨΠϠͱ SigmoidWithLoss ϨΠϠͷηοτΛɺਖ਼ ྫ༻ʹ̍ηοτɺෛྫ༻ʹ self.sample_size ηοτ΋ͭɻ • forward Ͱ͸֤ηοτʹதؒ૚ͷχϡʔϩϯΛ౉͠ɺฒྻͰޡࠩΛ ܭࢉ͢Δɻ͜Ε͸ P.28 ͷ Repeat ϊʔυʹ૬౰͢Δɻ • backward Ͱ͸ɺRepeat ϊʔυͷٯ఻ൖʹैͬͯޯ഑ΛՃࢉ͢Δɻ 24