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
570
言語モデルによる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.3k
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
レガシーな広告配信システムでのAI駆動開発/運用の挑戦
i16fujimoto
0
110
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
460
フィジカル版Github Onshapeの紹介
shiba_8ro
0
320
AIチャットの改善から見えた、良いAI体験とは / What Constitutes a Good AI Experience: Insights from Improving AI Chat
kubode
0
110
Chainlitで作るお手軽チャットUI
ynt0485
0
290
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
230
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
3
810
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
4
750
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
1
810
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.8k
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
180
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
520
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
How to Talk to Developers About Accessibility
jct
2
240
Technical Leadership for Architectural Decision Making
baasie
3
420
Design in an AI World
tapps
1
250
Deep Space Network (abreviated)
tonyrice
0
210
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
240
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
Code Reviewing Like a Champion
maltzj
528
40k
The untapped power of vector embeddings
frankvandijk
2
1.8k
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