Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goでつくる進化計算パッケージ
Search
tsurubee
July 13, 2019
Technology
3.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goでつくる進化計算パッケージ
tsurubee
July 13, 2019
More Decks by tsurubee
See All by tsurubee
大規模言語モデルにおけるData-Centric AIと合成データの活用 / Data-Centric AI and Synthetic Data in Large Language Models
tsurubee
1
590
言語モデルによるAI創薬の進展 / Advancements in AI-Driven Drug Discovery Using Language Models
tsurubee
2
620
AIトップカンファレンスからみるData-Centric AIの研究動向 / Research Trends in Data-Centric AI: Insights from Top AI Conferences
tsurubee
3
3.4k
DeepCrysTet: A Deep Learning Approach Using Tetrahedral Mesh for Predicting Properties of Crystalline Materials
tsurubee
0
1.3k
3次元メッシュで表現した結晶構造を用いた材料物性の予測に向けた深層学習モデルの設計 / Design of Deep Learning Model for Predicting Material Properties Using Crystal Structure Represented by Three-Dimensional Mesh
tsurubee
1
2.5k
分散システムの性能異常に対する機械学習の解釈性に基づく原因診断手法 / A Method for Diagnosing the Causes of Performance Issues in Distributed Systems Based on the Interpretability of Machine Learning
tsurubee
0
1.7k
機械学習の解釈性に関する研究動向とシステム運用への応用 / A Survey on Interpretable Machine Learning and Its Application for System Operation
tsurubee
0
390
機械学習モデルの局所的な解釈に着目したシステムにおける異常の原因診断手法の構想
tsurubee
0
8.1k
アニーリングマシンを活用したエッジAIにおける 生成モデルの学習効率化のためのアーキテクチャ
tsurubee
0
1.7k
Other Decks in Technology
See All in Technology
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
2.6k
金融の未来を考える / Thinking About the Future of Finance
ks91
PRO
0
180
ADDF - ループエンジニアリングするフレームワークを作ったら/I Didn't Set Out to Build Loop Engineering, But ADDF Did
fruitriin
0
100
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
150
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
150
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
12
5.6k
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
1
250
貴方はどのエンジニアリングを磨くのか
hatyibei
0
110
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
200
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
790
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2k
最近評価が難しくなった
maroon8021
0
260
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
Context Engineering - Making Every Token Count
addyosmani
9
1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
Done Done
chrislema
186
16k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Crafting Experiences
bethany
1
210
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
Evolving SEO for Evolving Search Engines
ryanjones
0
240
Embracing the Ebb and Flow
colly
88
5.1k
KATA
mclloyd
PRO
35
15k
Producing Creativity
orderedlist
PRO
348
40k
Transcript
GoConference’19 GoͰͭ͘ΔਐԽܭࢉύοέʔδ @tsurubee 2019.07.13 Go Conference '19 Summer in Fukuoka
GoConference’19 ా തจ (@tsurubee) GMOϖύϘגࣜձࣾ ϗεςΟϯάࣄۀ෦ ΠϯϑϥνʔϜ 2
GoConference’19 ࠓ͢͜ͱ wਐԽܭࢉͱҨతΞϧΰϦζϜͱ wҨతΞϧΰϦζϜͷΈ w(PݴޠʹΑΔҨతΞϧΰϦζϜͷ࣮ wࠓͷ͓ʢ࠷దԽʣΛղ͍ͯΈΔ 3
GoConference’19 ਐԽܭࢉͱ wੜͷਐԽৼΔ͍Λ฿ͨ͠࠷దԽख๏ͷ૯শ wϝλώϡʔϦεςΟοΫͳख๏Ͱ͋Γɺෳࡶͳߏͷಉఆ͕ ࠔͳʹ༗ޮͳ࠷దԽख๏ͱͯ͠ظ͞Ε͍ͯΔ 4
GoConference’19 ਐԽܭࢉͱ wੜͷਐԽৼΔ͍Λ฿ͨ͠࠷దԽख๏ͷ૯শ wϝλώϡʔϦεςΟοΫͳख๏Ͱ͋Γɺෳࡶͳߏͷಉఆ͕ ࠔͳʹ༗ޮͳ࠷దԽख๏ͱͯ͠ظ͞Ε͍ͯΔ 5 NFUBIFVSJTUJDBMHPSJUIN ಛఆͷͷΈΛରͱ͢ΔͷͰͳ͘ɺ ༷ʑͳʹରͯ͠ɺൺֱత࣌ؒͰ ۙࣅղΛޮΑ͘ٻΊΔղ๏
GoConference’19 ਐԽܭࢉύοέʔδ eago wཻࢠ܈࠷దԽ wҨతΞϧΰϦζϜ 6 IUUQTHJUIVCDPNUTVSVCFFFBHP &WPMVUJPOBSZ"MHPSJUINJNQMFNFOUFEJO(P ࣮ΞϧΰϦζϜ
GoConference’19 ਐԽܭࢉύοέʔδ eago wཻࢠ܈࠷దԽ wҨతΞϧΰϦζϜ 7 IUUQTHJUIVCDPNUTVSVCFFFBHP &WPMVUJPOBSZ"MHPSJUINJNQMFNFOUFEJO(P ࣮ΞϧΰϦζϜ ࠓճͪ͜Βʹ͍ͭͯհʂ
GoConference’19 ҨతΞϧΰϦζϜ(GA)ͱ w ूஂͷதͰڥʹదԠͨ͠ݸମ͕ΑΓߴ͍֬Ͱ ੜ͖Γɺ࣍ੈʹࢠΛ͢ʢࣗવ౫ଡઆʣΈ ΛιϑτΣΞతʹ͢͜ͱͰෳࡶͳʹର͢Δ ࠷దղΛ୳ࡧ͢Δख๏ w ͷղΛੜͷݸମʹݟཱͯͯɺͦͷݸମͷूஂʹ ରͯ͠ɺબʢ4FMFDUJPOʣަࠥʢ$SPTTPWFSʣಥવ
มҟʢ.VUBUJPOʣΛద༻͢Δ 8 ܦY5&$)৽ܕ৽װઢʮ/ܥʯͷlإz ΛੜΜͩʮҨతΞϧΰϦζϜʯͷൿີ IUUQTXXXTMJEFTIBSFOFUL[PLNHFOFUJDBMHPSJUIN IUUQTUFDIOJLLFJCQDPKQJUBSUJDMF$0-6./
GoConference’19 9 GAͷྲྀΕ
GoConference’19 10 GAͷྲྀΕ ූ߸Խ
GoConference’19 11 దԠ GAͷྲྀΕ ූ߸Խ
GoConference’19 12 GAͷྲྀΕ దԠ બ ූ߸Խ
GoConference’19 13 దԠ બ ަࠥ ಥવมҟ GAͷྲྀΕ ූ߸Խ
GoConference’19 ࠓͷ͓ 14
GoConference’19 Gopherͷը૾Λੜͯ͠ΈΑ͏ʂ 15 ූ߸Խʢ&ODPEJOHʣ దԠʢ'JUOFTTʣ બʢ4FMFDUJPOʣ
ަࠥʢ$SPTTPWFSʣ ಥવมҟʢ.VUBUJPOʣ ҎԼͷεςοϓʹԊͬͯղઆ͍͖ͯ͠·͢ʂ
GoConference’19 1. ූ߸ԽʢEncodingʣ 16 ʹର͢ΔղΛݸମͷછ৭ମɺղͷߏཁૉΛҨࢠͱͯ͠දݱ͢Δ છ৭ମɺʷʷ ࣍ݩϕΫτϧ 'MBUUFOJOH ɾɾɾɾ ʷ
<>VJOUܕ 3(#"ը૾
GoConference’19 ʹର͢Δղʢݸମʣͷྑ͞ΛධՁ 2. దԠʢFitnessʣ 17 ը૾ؒڑʢྨࣅʣϐΫηϧؒڑͷ૯ͷฏํࠜ ը૾ؒڑ͕θϩʹ͍ۙ΄Ͳɺ༏ΕͨղͰ͋Δ ը૾ؒڑ ϐΫηϧؒڑ ϢʔΫϦουڑ
GoConference’19 3. બʢSelectionʣ ڥʹదԠͰ͖Δݸମ΄Ͳ࣍ੈʹࣗͷҨࢠΛͤΔΑ͏ʹ͢ΔͨΊʹɺ ݸମͷదԠʹԠͯ͡ੜ͖ΔݸମΛબ͢Δ 18 τʔφϝϯτબʢUPVSOBNFOUTFMFDUJPOʣ ϥϯμϜʹநग़ͨ͠4ݸͷݸମͷ͏ͪɺ ࠷దԠ͕ߴ͍ݸମΛબ "
# $ % దԠ $ func Select(indi Individuals) (Individuals, error) { if len(indi) < t.NContestants { return nil, errors.New("NContestants is too large") } selected := make(Individuals, len(indi)) for i := range selected { winner := indi[rand.Intn(len(indi))] for j := 0; j < t.NContestants; j++ { next := indi[rand.Intn(len(indi))] if winner.Fitness > next.Fitness { winner = next } } selected[i] = winner } return selected, nil }
GoConference’19 4. ަ伹ʢCrossoverʣ 19 બ͞ΕͨͭͷݸମΛަࠥ͠ɺࢠݸମΛੜ͢Δ Ұަࠥ
ަࠥ ݸମ̍ ݸମ̎ ࢠݸମ̍ ࢠݸମ̎ ަࠥΛڥʹޓ͍ʹཁૉΛަ͢Δૢ࡞Λߦ͏
GoConference’19 5. ಥવมҟʢMutationʣ 20 ͍ͣΕͷ͍࣋ͬͯͳ͍ҨࢠΛࢠʹ࣋ͨͤΔ͜ͱͰଟ༷ੑͷҡ࣋͢Δ func (I Image) Mutation() {
mutationRate := 0.0005 rand.Seed(time.Now().UnixNano()) for i := 0; i < len(I.Pix); i++ { if rand.Float64() < mutationRate { I.Pix[i] = uint8(rand.Intn(255)) } } } ɾɾɾɾ ɾɾɾɾ Ұఆͷ֬ͰཁૉͷΛϥϯμϜʹมߋ͢Δ
GoConference’19 Ҏ্ͷεςοϓΛ܁Γฦͯ͠ ਐԽΛॏͶ͍͖ͯ·͢ʂ 21
GoConference’19 ͳͥGoݴޠͰॻ͍ͨͷ͔ʁ 22
GoConference’19 GAͷ՝ɿܭࢉ࣌ؒͷॖ w ("ɺେͳܭࢉྔΛཁ͢ΔͨΊɺ࣮༻࣌ؒͰྑͳղΛಘΔͨΊʹ ܭࢉॲཧΛߴԽ͢Δ͜ͱ͕·Ε͍ͯΔ 23 w ("ɺෳͷղީิΛ༻͍ͨଟ୳ࡧͷΞϧΰϦζϜͰ͋ΔͨΊɺຊ࣭త ʹฒྻԽͱੑ͕ߴ͍ w
ܭࢉ࣌ؒॖΛతͱͯ͠ɺ༷ʑͳ("ͷฒྻԽख๏͕ఏҊ͞Ε͍ͯΔ
GoConference’19 24 GAॲཧΛฒྻԽ͍͢͠ GoݴޠฒྻԽॲཧ͕ॻ͖͍͢ GoݴޠΛ͏ͱ༷ʑͳGAͷฒྻԽϞσϧ ΛαΫοͱ࣮Ͱ͖ͯ࠷ߴͳͷͰʁ
GoConference’19 ฒྻԽϞσϧɿϚελʔεϨʔϒํࣜ 25 4MBWF .BTUFS 4MBWF 4MBWF ɾɾɾ ϚελʔεϨʔϒํࣜ w
("ͷ࠷୯७ͳฒྻԽϞσϧͰ͋ΓɺదԠܭࢉΛฒྻԽ͢Δ w શମͷ੍ޚ͓ΑͼҨతૢ࡞Λߦ͏ϚελʔͱɺదԠܭࢉΛߦ͏ෳͷεϨʔϒ͔ Βߏ͞ΕΔ ͜͜ΛฒྻԽ͢Δʂ
GoConference’19 goroutineʹΑΔGAͷฒྻԽ w ͦΕͧΕͷݸମͷదԠܭࢉಠཱͯ͠ߦ͑ΔͨΊɺదԠܭࢉΛ͢ΔͨΊͷεϨʔϒͱͯ͠ HPSPVUJOFΛ্ཱͪ͛ͯɺฒྻͰܭࢉΛߦ͏ 26 func (indis Individuals) Evaluate(parallel
bool) { var wg sync.WaitGroup for i := range indis { wg.Add(1) go func(i int) { defer wg.Done() indis[i].Evaluate() //దԠܭࢉॲཧ }(i) } wg.Wait() } w TZOD8BJU(SPVQΛ༻͍ͯɺಠཱͨ͠ෳͷλεΫΛฏߦͰॲཧͯ͠ɺͦΕΒશͯͷऴྃΛͪ ߹ΘͤΔॲཧ͕γϯϓϧͳهड़Ͱ࣮Ͱ͖Δ
GoConference’19 Demo 27
GoConference’19 GAʹΑΔը૾ੜ 28 (PQIFSͷ͕࢟ʜʂ ʻ݅ʼ 1PQVMBUJPO4J[F $SPTTPWFS3BUF .VUBUJPO3BUF 5PVSOBNFOU4J[F ੈ
ੈ ඪ ੈ
GoConference’19 ฒྻԽͷ༗ޮੑ 29 దԠܭࢉͷฒྻԽ͕ॲཧ࣌ؒͷॖʹد༩͍ͯ͠Δ Ϛγϯɿ.BD#PPL1SP ϓϩηοαɿ()[*OUFM$PSFJ ϝϞϦɿ(#
GoConference’19 ·ͱΊ w("Λ࢝Ίͱͨ͠ਐԽܭࢉɺෳࡶͳߏͷಉఆ͕ࠔͳ ʹ༗ޮͳ࠷దԽख๏ͱͯ͠ظ͞Ε͍ͯΔ w("ଟ୳ࡧΞϧΰϦζϜͰ͋ΔͨΊɺฒྻԽͱੑ͕ߴ͍ wHPSPVUJOFΛ༻͍ΔͱαΫοͱ("ͷฒྻԽॲཧ͕ॻ͚Δ w("ͰԿͱ͔(PQIFSͷ໘Ө͕ݟ͑Δը૾͕࡞Εͨ 30
GoConference’19 ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ 31