第30回世界コンピュータ将棋選手権の頂点を目指せだぜ☆(^~^)<その1>

きふわらべ 公開下書き

2020-01-30(Thu) 21:15 - 24:00

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 確定申告の書類作りが進まず……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 もういい、寝ろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 1月31日に ひばりが丘駅南口のコンビニが潰れるから コピー機使えなくなるわよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 コピー機がないと不便だよな☆」

20200130blog13.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 きふわらべ でもいじるか……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 これは WCSC28版じゃないか☆ 去年のはお蔵入りか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 WCSC28版は どうぶつしょうぎ、 WCSC29版は 大橋流バージョンか……☆ はあ~☆
最近の流行りに書き直そうぜ☆? チェス風にするのが ふつうなんだろ☆?」

20200130blog14.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 はあ~☆
Rust の 2018エディション以前に書いたから、新しい Rust ではコンパイルが通らないぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どう 書き直したらいいのかしら?」

20200130blog15.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 配列の初期化って 書き方 変わったんだろうか☆?」

cargo check 2> ./error.log

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ とりあえず、エラー出力を ファイルにリダイレクトしよう……☆」

/// こういうコメント

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なんか ドキュメント・コメントは 書ける位置が決まってるみたいだな……☆」

//! こういうコメント

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ファイルの先頭のコメントにも 書き方があるのかだぜ☆?」

error[E0433]: failed to resolve: use of undeclared type or module `teigi`

 --> src\consoles\asserts.rs:4:5
  |
4 | use teigi::shogi_syugo::*;
  |     ^^^^^ use of undeclared type or module `teigi`

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ モジュール・システムも だいぶ変わってしまったのか☆?」

main.rs:

Before:

mod teigi;

After:

pub mod teigi;

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 適当に 書きかえてみるか……☆」

use super::a::*;
use self::b::*;

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 絶対パスでエラーがでるから、相対パスにしてみるか……☆」

use super::super::a::*;
use super::super::super::b::*;

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ super が どこ指してるか分からん……☆ ../ とかにしてくれればいいのに……☆」

muzudho/rust-kifuwarabe-wcsc30

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ モジュール・システムを書き直して ギットハブにあげるぜ☆」

2020-01-31(Fri) 20:25 -

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 うー 寒(さぶ)☆」

rust-lang/rls

rustup update

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Rustの環境 更新しよ……☆」

error: could not remove 'rustup-bin' file: 'C:\Users\むずでょ\.cargo\bin\rustup.exe'
error: caused by: アクセスが拒否されました。 (os error 5)
error: backtrace:
error: stack backtrace:
   0PS C:\Users\むずでょ\source\repos\rust-kifuwarabe-wcsc30> : <unknown>
   1: <unknown>
   2: <unknown>
   3: <unknown>
   4: <unknown>
   5: <unknown>
   6: <unknown>
   7: <unknown>
   8: <unknown>
   9: BaseThreadInitThunk
  10: RtlUserThreadStart
  ```

![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e32c8a5d4ee9.gif)
「 なぜなのか……☆?」

`[Windows] + [R], cmd`

rustup component add rls rust-analysis rust-src
info: component 'rls' for target 'x86_64-pc-windows-msvc' is up to date
info: component 'rust-analysis' for target 'x86_64-pc-windows-msvc' is up to date
info: component 'rust-src' is up to date


rustup install nightly-2018-12-06



# 2020-02-01(Sat) 12:00 - ![20200201wcsc1a1.png](https://crieit.now.sh/upload_images/4cbcd56b787524a7d0644ac73ed1d7eb5e34f66c3203a.png) ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e32c8a5d4ee9.gif) 「 駒の名称を チェスに合わせよう☆ 世界を視野に入れると それが普通だからな☆」

Bad: PB
Good: PromotedBishop


![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e32c8a5d4ee9.gif) 「 ↑ 2010年の後半あたりからだろうか、2020年現在は 頭文字を使った略称ではなく、名称にするのが 流行りだぜ☆」 ![OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif](https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5e32c8d0e40ed.gif) 「 英語で発声できる名前の方が 今の映像配信時代には 口頭で コミュニケーションしやすいのよね」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e32c8a5d4ee9.gif) 「 可視性より 伝達性の方が重要なんだろうな☆ また10年後には どうなるか知らんが☆」 ![20200201wcsc2.png](https://crieit.now.sh/upload_images/2a9cf69016b04dff31c1a108f8cc44955e34fc035cb0a.png) ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55e32c8a5d4ee9.gif) 「 駒を裏返すと 何の駒になる、というのは switch 構文や、 match 構文を使うのが高速だが、しかし待ってほしい☆ リンク・リスト形式も ワンチャンあるのではないか☆?」 ![KIFUWARABE_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5e32c8bf0a395.gif) 「 駒の種類を オブジェクト型定数 にするのかだぜ☆? それも どうだか☆」 ```rust use super::piece::Piece; pub struct PieceStruct { piece: Piece, /// 駒→成駒 (成れない駒は、そのまま) promoted: Piece, } impl PieceStruct { pub fn from_piece(p: &Piece) -> Self { use super::piece::Piece::*; match *p { King1 => PieceStruct { piece: King1, promoted: King1, }, Rook1 => PieceStruct { piece: Rook1, promoted: PromotedRook1, }, Bishop1 => PieceStruct { piece: Bishop1, promoted: PromotedBishop1, }, Gold1 => PieceStruct { piece: Gold1, promoted: Gold1, }, Silver1 => PieceStruct { piece: Silver1, promoted: PromotedSilver1, }, Knight1 => PieceStruct { piece: Knight1, promoted: PromotedKnight1, }, Lance1 => PieceStruct { piece: Lance1, promoted: PromotedLance1, }, Pawn1 => PieceStruct { piece: Pawn1, promoted: PromotedPawn1, }, PromotedRook1 => PieceStruct { piece: PromotedRook1, promoted: PromotedRook1, }, PromotedBishop1 => PieceStruct { piece: PromotedBishop1, promoted: PromotedBishop1, }, PromotedSilver1 => PieceStruct { piece: PromotedSilver1, promoted: PromotedSilver1, }, PromotedKnight1 => PieceStruct { piece: PromotedKnight1, promoted: PromotedKnight1, }, PromotedLance1 => PieceStruct { piece: PromotedLance1, promoted: PromotedLance1, }, PromotedPawn1 => PieceStruct { piece: PromotedPawn1, promoted: PromotedPawn1, }, King2 => PieceStruct { piece: King2, promoted: King2, }, Rook2 => PieceStruct { piece: Rook2, promoted: PromotedRook2, }, Bishop2 => PieceStruct { piece: Bishop2, promoted: PromotedBishop2, }, Gold2 => PieceStruct { piece: Gold2, promoted: Gold2, }, Silver2 => PieceStruct { piece: Silver2, promoted: PromotedSilver2, }, Knight2 => PieceStruct { piece: Knight2, promoted: PromotedKnight2, }, Lance2 => PieceStruct { piece: Lance2, promoted: PromotedLance2, }, Pawn2 => PieceStruct { piece: Pawn2, promoted: PromotedPawn2, }, PromotedRook2 => PieceStruct { piece: PromotedRook2, promoted: PromotedRook2, }, PromotedBishop2 => PieceStruct { piece: PromotedBishop2, promoted: PromotedBishop2, }, PromotedSilver2 => PieceStruct { piece: PromotedSilver2, promoted: PromotedSilver2, }, PromotedKnight2 => PieceStruct { piece: PromotedKnight2, promoted: PromotedKnight2, }, PromotedLance2 => PieceStruct { piece: PromotedLance2, promoted: PromotedLance2, }, PromotedPawn2 => PieceStruct { piece: PromotedPawn2, promoted: PromotedPawn2, }, Kara => PieceStruct { piece: Kara, promoted: Kara, }, Owari => PieceStruct { piece: Owari, promoted: Owari, }, } } pub fn piece(self) -> Piece { self.piece } pub fn promote(self) -> Piece { self.promoted } }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ つまり こう☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 どうなんだろなあ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 人間がボトルネックなのだから、コーディングは 人が目視確認できることが重要なのよ。
コンピューターが最高の成功を発揮できないことより、人類のポカが足を引っ張ることの方がデカいのだから、
人力で管理しやすいように作りなさい」

KIFUWARABE_80x100x8_01_Futu.gif
「 発想が 開発(部) だな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 升も 番号で持ってるんだが、この番号はよく変換処理入るんで、オブジェクトにしてメソッドを持たせられないか……☆」

20200201wcsc4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あっ、バグった☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 くそっ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 最後まで指さないと テストにならんか……☆」

20200201wcsc5a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わたしは しつこい☆ バグが出ない版まで遡り、ソースコードと睨めっこだぜ☆
ここの 順番を入れ替えたところが BAD だったぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 直せだぜ☆」

2020-02-04(Tue) 21:30 -

20200204wcsc7.png

KIFUWARABE_80x100x8_01_Futu.gif
「 そろそろ お父んは 頂点になった頃だろうか……☆(^~^)?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 グローバル変数に universe と名前を付けているが、その下に game を作りたいぜ☆
対局という意味だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 search で十分なんじゃないのか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 それより winner (勝者)の方がよくない☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それはありだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 次の話題☆ Rust のメモリの思想からすると、
アプリケーション起動時に 駒を全種類作っておいて、
盤の上には その駒の名前のようなもの、C言語で言うならポインターを置いておくのが いいのだろうか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 何を言っているか分からないが、最適化の話しなら 後にしろだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 はっしゅ とか言うのを使うのが常套手段そうよ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それは やりたいところだな……☆ PieceHash とかいう列挙型を作るといいのかもしれないが……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 列挙型のことをハッシュとは言わない☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 アプリケーション起動時に作った駒の 実体application 変数に入れておいて、それとは別に 盤面の上に 実体を指す名前 を置いておけば いい気もするが……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ position (局面)は駒を持ってない ただの目録かだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 駒を 0~15 の数で表すのは 普通では☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 先後があるので およそ30駒な☆ それでいくか☆」

       &universe
            .get_application_part()
            .get_piece_struct_master()
            .get_piece_struct(
                universe
                    .get_search_part()
                    .get_current_position()
                    .get_piece_by_square(&square),
            )
            .phase(),

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ これは クソコード かだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 階層が深いのは クソコード だよな☆
駒の実体は search_part に持たせた方がいいのか……☆?」

    universe
        .get_search_part()
        .get_piece_struct_by_square(&square)
            .phase();

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ひとまず、 search_part から見て 見た目上 1階層で呼び出しているように見えるようにしておくぜ☆」

    for pc in KM_ARRAY.iter() {
        g_writeln(&format!("利き数:{}", pc));
        let s = universe.kaku_number_board(&Phase::Owari, *pc); // Error
        g_writeln(&s);
    }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ イテレーターで取ってこれるの参照だから、* を付けて実体にするが、これを関数の引数に渡すと ボローと取られるのかだぜ☆
.clone() で逃げれるかな……☆?」

2020-02-09 (Sun) 14:00 -

20200209wcsc10a1b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 繰り返し作業のとき こういうタイピングミスをしやすいぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んの Rust-RLS、 オート・コレクトなんで働かないんだろうな☆?」

2020-02-14 (Fri) 20:45 -

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 バック・プロパゲートを調べようぜ☆?」

解説.txt

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ やねうら王の learn 部を見ようぜ☆?」

learner.cpp

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2,800行ほどある……、萎え……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父ん、微分は 見つかったか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 急ぐなだぜ☆ のんびり☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 微分の連鎖律とか、さっぱり見当たらん☆
シグモイド関数と その導関数が見つかるだけだぜ☆」

https://github.com/yaneurao/YaneuraOu/blob/master/source/learn/learner.cpp:

// 995行目
// 普通のシグモイド関数
double sigmoid(double x)
{
    return 1.0 / (1.0 + std::exp(-x));
}

// 1009行目
// 普通のシグモイド関数の導関数。
double dsigmoid(double x)
{
    // シグモイド関数
    //    f(x) = 1/(1+exp(-x))
    // に対して1階微分は、
    //    f'(x) = df/dx = f(x)・{ 1 - f(x) }
    // となる。

    return sigmoid(x) * (1.0 - sigmoid(x));
}

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 この式は 何年か前に見たやつじゃない。象さんなんでしょ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ひとまず ここから解説していこうぜ☆」

20200214wcsc47.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 数学には いろいろな話しと出会うと思うが、 飯を食べれば うんこをするように、
疑問を抱かずに受け入れて欲しいのが 空っぽのことをゼロ、満タンのことをイチ と呼ぶことだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 空っぽ だの、 満タン だの、中途半端 だの そんなに最初に もったいぶって 説明するほどのことかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 0.9 というのは 0と1 があって、そこから遠回りして やっと出てくる数だし、
2 というのは 1 と 1 があるから出てくる数だし、 ゼロ と イチ は 種とか 卵とか そういう全ての原因だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 じゃあ ゼロ と イチ だけ極めれば どんな数も作れるんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 卒業だぜ☆ 数学は終わった☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 まだ 飯を食べて うんこをするところしか 始まってないのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さらに進んで、もう1つの見方がある☆」

20200214wcsc48.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 1に満たないか、満ているか の2択だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 0か、 中途半端か、 1か、 の3択なんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それは 中途半端を許せば そうなるな☆ そうではなく、中途半端を許さない場合は
『空か または 何かがある』
また そうでない場合は
『足りないか または 足りた』
の ケースだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 どっちでもいい……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わたしは このポンプを見ているだけで 面白くて 満足感がある……☆」

20200214wcsc49.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 中途半端なものを数えないのなら、 0 と 1 だけあれば いいんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これは 数学の特徴というより、人類の特徴なのかも知れない☆
切り捨ての不思議 だぜ☆ 例えば……☆」

20200214wcsc50.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これぐらい いっぱい入った ドリンクが 4本あったとしよう☆」

20200214wcsc51.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 満タンではなかったのだから、内容量 ゼロ のドリンク4本 飲んだのと同じだよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 理解に苦しむ……☆」

20200214wcsc52.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 総量で数えていいのなら 3本と さらに1本弱 飲んだと言っていいはずだぜ☆
しかし その或る世界 は総量では できてないんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで 総量 にできないんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 簡単な解釈を与えれば……☆」

20200214wcsc53.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 味が違うから 混ぜたものは 認められないとかだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 1 は 超えてもいいの? 100万とか 10兆とか」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 100万飲んでも 10兆飲んでも 1本分な☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 それも理解に苦しむ……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 このとき、1とは 何なのか、に 説明というか、言葉を与えるとするなら
スレッシュホールド(Threshold; 閾値)だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 スレッシュホールドは 2 とか、 1000兆 とかじゃダメなの?」

20200214wcsc54.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 閾値を1000兆にするより、 コイン1枚の額面を 1000兆分の1 にしろだぜ☆
大丈夫、イチゴ味の世界のコイン1枚と スイカ味の世界のコイン1枚は 比較しないんで、桁が違ってても気にするなだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そんな特殊ルール、数学と何の関係が有るんだぜ……☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 上の図は シグモイド関数を使っていない例だぜ☆
じゃあ、シグモイド関数が何をしているものなのかは、もう説明できるぜ☆」

20200214wcsc55.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これが シグモイド関数を使ってできることだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ぐちゃぐちゃになっただけだぜ☆」

20200214wcsc56a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ シグモイド関数が無いときは こうだろ☆」

20200214wcsc56a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 有るときは こうだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 何が違うの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 真ん中と 端っこでの傾きが違う☆」

20200214wcsc56a1b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 傾きの違い を調べたいときには、こんな線形のグラフは 役に立たん☆」

20200214wcsc56a2b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ シグモイド関数に通して見た数は 真ん中の近くのときの傾きは敏感で、端っこの時は 鈍感だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 さっぱり分かんないわね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 言ってしまえば 限りなく大きなこと、限りなく小さなこと について 鈍感 にしてるんだぜ☆
逆に ある範囲内でだけ 敏感 にしてるんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんべん聞いても さっぱり分からん☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 多変数関数の合成関数の微分の連鎖律は どこにあんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 多変数と言っても 絵に描けるのは3次元までなんで、
ここでは 2変数としよう☆」

20200215wcsc57.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今までは 1変数 だったわけだぜ☆」

20200215wcsc58.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2変数 だと 平面で描けるな☆ 絵がヘタクソで上手く見せれていないが……☆」

20200215wcsc59a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2変数関数の偏微分だと こうなる☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 偏微分じゃなくて、微分なのよ」

KIFUWARABE_80x100x8_01_Futu.gif
「 合成って何だぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 合成は 関数の引数に入れるだけだぜ☆」

20200215wcsc60.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 2変数関数 と、 2つの2変数関数 の違いは よくイメージしてくれだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 頭が おかしくなる!」

20200215wcsc61.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 2つの2変数関数の合成関数 も イメージ できるだろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 おかしくなった頭の中にある おかしさが 頭になる!」

20200215wcsc62.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 2つの2変数関数の合成関数の微分 が どこを微分してるのかは よくわからないよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 あらゆる方向に微分すればいいじゃないか☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あらゆる方向って、どうやって計算するんだぜ☆(^~^)!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 多変数関数の合成関数の微分 には 連鎖律 があるそうよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 連鎖律 なんか どこにあるんだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んの考え方では 連鎖できないのではないか☆? なんで 合流 してるんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 合成 だろ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 2つのものが1つになっている☆ 合流 だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 連鎖律 さっぱり分からんな……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 他の人の連鎖律を見てみると、タンデムになってない? あんたのは 合流してんのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 日本語を読んだとおりにやってるのに……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 分からんところは 後回しだぜ☆ シグモイド関数を説明しよう☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 シグモイド関数は もういいのに……☆」

20200215wcsc63.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ eはネイピア数で 2.718281828… みたいな3より小さい数で、マイナスの指数は
ガンガン割って小さくしていく ぐらいの意味なんで、xが大きくなると、分数は小さくなるんで、数としては 大きくなっていて、
永遠に1にはならないが、限りなく1に近づくぜ☆(^~^)」

KIFUWARABE_80x100x8_01_Futu.gif
「 何を言ってるか分からん☆」

2020-02-15 (Sat) 11:25 -

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 他の人の 多変数関数の合成関数の微分 を見ると なんか わたしのやり方と違うな……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 成分ごとに 微分してるのよ!」

20200215wcsc61.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 2つの2変数関数の合成関数 は合ってると思うんだが、微分の仕方が違う……☆」

20200215wcsc64.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こうなのでは☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 偏微分 を覚えたか☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 しかし ∂w がy軸を動いているのは 変な気がする……☆」

20200215wcsc64a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ、こうなのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ xの他の軸を固定したら 合成関数から見れば 遡って ∂u も動いてはいけないぜ☆(^~^) 固定だぜ☆(^~^)」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どのx軸だけ動けんの? ∂z だけ動けんの? それ以外の軸は 過去にさかのぼって固定されんの?」

20200215wcsc64a3b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 x軸を1つ 固定したら そうなるだろ☆!」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んの図は 独立変数従属変数 がはっきりしてないらしいぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんてこった☆(^~^)!」

多変数関数と偏微分

20200215wcsc65a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 独立変数と、従属変数は こいつらだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この図では x も u も z も x軸みたいに見えるが、 x軸と u軸と z軸は まったく別物だぜ☆ 同じものだと思うなだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 成長したな☆」

20200215wcsc66.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 xの動きが よく見えるようになってきたぜ☆」

20200215wcsc67.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 xを動かせば t が一意に定まりそうだぜ☆(^~^)」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 それを 微分でやるのよ」

20200215wcsc68.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ∂(デル)は xと zと t に付くが、定数u、v、y、wは 式に出てこないんじゃないか☆?」

20200215wcsc69.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 絵図が見えてきたぜ☆」

合成関数の微分の連鎖律

y = f(x)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 答え合わせをする必要があるので、他人が残したメモをパクるぜ☆
関数f は xの1変数しかないが、まあ いいだろう……☆」

y = (3x^2 +4x +3)^4

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 関数f の定義は上の通りとする☆
これを いったん、2ステップに分けるみたいだぜ☆」

y = u^4
u = 3x^2 +4x +3

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで分けたの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 合成関数 の話しをしたいんだから、関数は合成して作るんだぜ☆
合成の話しをするために、今、もともと1つだったものを、わざと 2つに分けたんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 フーン」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 次に 微分しようぜ☆」

dy/du = 4*u^3
du/dx = 2*3x^1 +1*4 + 0*3(x^-1)
      = 6x + 4

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んが 微分をするときの 手つきが怪しいぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここで、 dy/du と du/dx を掛け合わせると、 y になるらしいぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ほんとか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 やってみようぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 微分したものと、微分したものの掛け算って どうやんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 微分したことを忘れて 目の前にある2つの式を掛け算しろだぜ☆」

y = dy/du * du/dx
  = (4*u^3) * (6x + 4)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ つまり こういうことだと思うが……☆」

y = (4*u^3 * 6x) + (4*u^3 * 4)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 初手は 分配法則ぐらいしか やることないと思う☆」

y = (4u^3 * 6x) + (16u^3)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ うーむ、さっぱり☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 u に 3x^2 +4x +3 を代入して u を消すんじゃないの?」

y = ((4 (3x^2 +4x +3)) ^3 * 6x) + ((16 (3x^2 +4x +3)) ^3)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ u を消してみるかだぜ☆」

y = ((12x^2 +16x +12)^3 * 6x) + (48x^2 +64x +48)^3

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 分けもわからず 分配法則☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 詰まったぜ☆」

2020-02-16 (sun) 05:30-

合成関数の微分の連鎖律

KIFUWARABE_80x100x8_01_Futu.gif
「 やりなおせ☆!」

y = dy/du * du/dx
  = (4*u^3) * (6x + 4)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここからか……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 分配するのと、uに代入するの、どっちが先がいいんだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 さっきと違う手順でやりなさい」

u = 3x^2 +4x +3
dy/du = 4*u^3
du/dx = 6x + 4

y = dy/du * du/dx
  = (4*u^3) * (6x + 4)
  = (4*(3x^2 +4x +3)^3) * (6x + 4)
  = (4*(3x^(2+3) +4x^3 +3^3)) * (6x + 4)
  = (4*(3x^(5) +4x^3 +9)) * (6x + 4)
  = (12^5 +16x^3 +36) * (6x + 4)
  = ((12^5 +16x^3 +36) * 6x) + ((12^5 +16x^3 +36) * 4)
  = (12^5 * 6x +16x^3 * 6x +36 * 6x) + (12^5 * 4 +16x^3 * 4 +36 * 4)
  = ((12*6x)^5 +(16x * 6x)^3 +216x) + (48^5 +64x^3 +144)
  = ((72x)^5 +(96x)^3 +216x) + (48^5 +64x^3 +144)
  = (72x^5 + 96x^3 + 216x) + (48^5 + 64x^3 +144)
  = 72x^5 + 96x^3 + 216x + 48^5 + 64x^3 +144
  = 72x^5 + 48^5 + 96x^3 + 64x^3 + 216x +144

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ふぅ、どうにもならんぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 やりなおせ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 他の人のを見ると、u に代入してないが……☆」

u = 3x^2 +4x +3
dy/du = 4*u^3
du/dx = 6x + 4

y = dy/du * du/dx
  = (4*u^3) * (6x + 4)
  = (4u^3) * (6x + 4)
  = 4u^3 (6x + 4)
  = u^3 (24x + 16)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ここを分配するのがいいのか、しない方がいいのか 分からんな……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 桁数は 小さい方がいいのでは☆?」

y = 4u^3 (6x + 4)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ ここで いったん、止めておこうぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 u を消しなさいよ!」

u = 3x^2 +4x +3
y = 4u^3 (6x + 4)
  = 4(3x^2 +4x +3)^3 (6x + 4)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ x の関数 y がでけた……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ちょっと待ってほしい☆」

y = (3x^2 +4x +3)^4

y = 4(3x^2 +4x +3)^3 (6x + 4)

KIFUWARABE_80x100x8_01_Futu.gif
「 この2つは 同じなのだろうか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 同じなわけ ないだろ☆」

y = (3x^2 +4x +3)^4

y = 4(3x^2 +4x +3)^3 (6x + 4)
                     ~~~~~~~~

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 上のyは 微分する前で、
下のyは、 上のyを微分したものに すこし端数が付いている☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 少しどころではないわよ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 xの2乗 の次元に比べれば、 x倍、 1倍の世界は 無視していいほど小さいということだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 いいかげんだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もうちょい 説明を加えると……☆」

f(x)  = y  = (3x^2 +4x +3)^4

f'(x) = y' = 4(3x^2 +4x +3)^3 (6x + 4)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 上の y は 元の形、
下の y' は y の 導関数 と呼ぶ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 本当か☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 じゃあ ライプニッツの微分式の記法は 導関数 なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そうなるな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 導関数 は 英語で 何て言うの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Derivative(デリベーティブ)だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 微分 は 英語で 何て言うの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Differential(ディファレンシャル)だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 導関数 って いいかげん じゃない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 恐らく、近似 なのでは……☆?」

多項式の近似によるいろいろな関数の導関数

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 大きな次元では合っていて、小さな次元では 合ってないのでは☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 全然 合ってないじゃないのよ!」

20200216wcsc70.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ で、これは 合ってるのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 合ってる、合ってないではなく、定義式じゃないか それ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 手計算で 合ってるか 検算する趣旨なのに、定義式じゃ 検算も何も ないじゃないのよ!」

20200216wcsc71.png

連鎖律(多変数関数の合成関数の微分)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ で、 多変数関数の合成関数の微分 の例をパクってくると こういう感じだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 +記号って どういう働きをするの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 足すんじゃないか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 足していいのか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 u と v は 総量として1つのもので、どこかで 2つに分けたんだろ☆ 等分割に限らないだけで☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 xも yも 同じ u、 v を使うのか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 式を見ると 使ってるな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 x が相手にする u と、 y が相手にする u は、同じ u なの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 u1 でも u2 でもなく、 u と書いてるから 同じなんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あれっ、よく見ると 式が違うぜ☆?」

20200216wcsc72.png

連鎖律(多変数関数の合成関数の微分)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ d(ディー)ではなく ∂(デル)だったぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 大違いなんじゃないのか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 すると 前に描いた 2つの二変数関数の合成関数の微分 には足し算が無かったから、間違いがあるのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんということだぜ☆」

20200216wcsc73.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 二変数関数を よく見直そうぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 二変数関数 x,y の出力は u ではないのよ。 (u,v) なのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なるほど……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 二値を返す図を描けばいいわけかだぜ☆」

<次の記事へ>

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事