tottocoslowlifer / tide

2024年のプロジェクト
0 stars 0 forks source link

タスク外の連絡事項や雑談場所 #6

Open victor-von-pooh opened 8 months ago

victor-von-pooh commented 8 months ago

目的

タスクの指示など以外で連絡することがあればここに書く.

など.

重要度

連絡の重要度の Tier をタイトルに入れる. Tier は次を参照.

  1. 重要度大(Zoom のセッティングや対応困難な状況の伝達など)
  2. 重要度中(そこまで重要では無いものの, 伝えておくべきこと)
  3. 重要度小(面白い映画や漫画の紹介などの軽い雑談等)

返信について

仕様上ツリーのようには出来ないので, どの話題についての返信なのかがわかるようにタイトルを付ける.

ex.) 「# RE. 3月23日の Zoom について」

victor-von-pooh commented 8 months ago

4月以降の対応状況の変化について(1)

秋田が就職することに伴って, 平日の稼働率が下がります. まだどれくらい出来なくなるかは分かりませんが, ご理解のほどよろしくお願い致します.

victor-von-pooh commented 7 months ago

長期インターンの紹介について(2)

秋田が1年半ほど在籍していた長期インターンの紹介です.

社名 : ギリア株式会社 事業内容 : 独自技術による高性能・高品質なAIソリューション開発 クライアント例 : スクリーンショット 2024-03-25 19 28 04

オフィシャルサイトはこちらから.

何ができるか

実案件を通じてAIを駆使した問題解決のフローを学ぶ. 最新の技術に触れ, それを自分たちで構築する.

勤務情報

契約期間は原則6ヶ月以上. 主に在宅なため全国から参画可(出社の場合は御徒町のオフィス, 東京都台東区台東4丁目19−9 山口ビル 7 8F). 雇用形態はアルバイト. 給与は時給1200円から. 交通費支給, PC(Mac)の支給あり.

応募

応募フォームはこちらから.

victor-von-pooh commented 7 months ago

深層学習についての学習用書籍の紹介について(2)

深層学習(Deep Learning)についての基礎的な知識が学べる書籍の紹介です. 現在, この分野における最も多く使われている教科書的な役割を持つ書籍はこちらです.

「ゼロから作るDeep Learning - Pythonで学ぶディープラーニングの理論と実装」

DeepLearning

書籍情報詳細

中には自分でゼロからニューラルネットワークを作るためのコーディング方法も記載されていますが, 普通はゼロから作らず PyTorch や TensorFlow といったライブラリを活用するので, この本はニューラルネットワークの基礎理論を学ぶことに使うのが良さそうです.

tottocoslowlifer commented 6 months ago

ZOOMミーティングについて(1)

先ほど、5/1(水)20:00-21:30ということで、招待を送らせていただきました. 直前で申し訳ありません.ご確認の程よろしくお願いいたします.

victor-von-pooh commented 6 months ago

RE. ZOOMミーティングについて

了解しました. 秋田の理科大支給の Zoom のアカウントが無くなったため, ミーティングの設定はとこさん側からお願いします.

tottocoslowlifer commented 6 months ago

RE. ZOOMミーティングについて

おはようございます. ただいま,招待が送信されたかと思うので,ご確認の程よろしくお願いいたします.

tottocoslowlifer commented 5 months ago

ニューラルネットワークの実装について(1)

夜分に失礼いたします. ニューラルネットワークについて,動画の視聴が完了いたしました. また,同じようにコードを組み,practice_pytorch.ipynbとしてコミットしたので,ご確認いただきたいです.

一点質問なのですが,

・すでにphase == "Train"を指定している中で,さらにif分岐でphase == "Train"とするのはなぜでしょうか.

with torch.set_grad_enabled(phase == "Train"):
    outputs = model(inputs)
    loss = criterion(outputs, label) ** 0.5

    # 逆伝播を行う
    if phase == "Train":
        loss.backward()
        optimizer.step()

以上,よろしくお願いいたします.

victor-von-pooh commented 5 months ago

RE. ニューラルネットワークの実装について

お疲れ様です. 動画のご視聴ありがとうございます. 質問についてご回答させていただきます.

すでに phase == "Train" を指定している中で,さらにif分岐で phase == "Train" とするのはなぜか

順を追ってご説明します.

torch.set_grad_enabled(phase == "Train") とは, set_grad_enabled() メソッドの引数が True のとき, 勾配を計算するというものを意味しています. 今回であれば, phase == "Train" のとき(学習モードのとき)のみ勾配を算出するという命令を下します. つまり, この with 構文の中では phase == "Train" のときのみ勾配が計算されるということです. この with の中の処理そのものは学習モードでも検証モードでも行われることになります. ただし, 検証モードのときはそもそも誤差逆伝播をしないので, if phase == "Train": で分岐を入れる必要があります.

これを学習モードと検証モードに分けて記述すると, 例えば次のようになります.

if phase == "Train":
    with torch.set_grad_enabled(True):
        outputs = model(inputs)
        loss = criterion(outputs, label) ** 0.5
        loss.backward()
        optimizer.step()
else:
    with torch.set_grad_enabled(False): # ここは書かなくても良い
        outputs = model(inputs)
        loss = criterion(outputs, label) ** 0.5

元のコードに比べ, 同じ処理が分岐で重複し, 冗長になってしまいますね.

tottocoslowlifer commented 5 months ago

RE. ニューラルネットワークの実装について

これを学習モードと検証モードに分けて記述すると, 例えば次のようになります.

まさに,なぜそのようなコードにならないのか,と考えていたところでした. 書き方にはまだ慣れませんが,冗長さを避けるための工夫であり,本質的には同じ意味なのですね.

ありがとうございました.

victor-von-pooh commented 5 months ago

RE. ニューラルネットワークの実装について

practice_pytorch.ipynb ファイルを確認しました. PyTorch の使い方としては非常に理解が進んでいるという印象です. 細かい粒度でのコメントは以下の通りです.

セル3

まず, to_torch() 関数の返り値なのですが, すみません, set ではなく tuple[torch.Tensor, torch.Tensor] ですね.

次に, prepare_nn() 関数内で StandardScaler() を使っていますが, 全てに標準化を適用してしまうと, 目的変数を元のスケールで評価出来なくなってしまいます. すなわち, 本来 4745.78 であるのに 4755.78 と予測した場合にも, 標準化後のスケールでの差になってしまうので, 10 の差が例えば 0.01 の差などになり, MSE をかけたときに実際より非常に精度が良くなってしまうという現象が起きます. 後に StandardScaler().inverse_transform() メソッドをかける必要が出てくるので, 返り値に std_xstd_y は必須です. さらに StandardScaler() は確か Tensor 型には対応していないので, df として X_train, y_train, X_valid, y_valid, X_eval, y_eval の情報は返せるようにしたいところです.

セル5

nn.Sequential() の中身の次元操作を柔軟にしたいので, 次のようにすると良いと思います.

class NeuralNetwork(nn.Module):
    def __init__(
        self, input_dim, output_dim,
        first_dim, second_dim
    ):
        super().__init__()
        self.flatten = nn.Flatten()

        self.linear_relu_stack = nn.Sequential(
            nn.Linear(input_dim, first_dim),
            nn.ReLU(),
            nn.Linear(first_dim, second_dim),
            nn.ReLU(),
            nn.Linear(second_dim, output_dim)
        )

    def forward(self, x):
        x = self.flatten(x)
        outputs = self.linear_relu_stack(x)
        return outputs

セル13

ここで std_y を使って予測値を本来の標本空間上に引き戻してあげる必要があります.

tottocoslowlifer commented 5 months ago

RE. ニューラルネットワークの実装について

ご確認ありがとうございます. 修正の結果,下のような図が出力されました. image

ここで疑問なのですが,「目的変数の正規化」が必要なのはなぜでしょうか. 必要性を考えずにここまで進めてしまい,申し訳ないのですが,お答えいただけたら幸いです.

よろしくお願いいたします.

victor-von-pooh commented 5 months ago

RE. ニューラルネットワークの実装について

図に関して, correct ラベルが直線になっているのは違和感がありますね. 何かおかしなことがないか確認してみてください. prediction については元の画像のスケール違いとなっていそうなので良さそうですね.

ここで疑問なのですが,「目的変数の正規化」が必要なのはなぜでしょうか. 必要性を考えずにここまで進めてしまい,申し訳ないのですが,お答えいただけたら幸いです.

普通はあまりしないのかもしれないです. ここについては秋田の知識不足もあるのでなんとも言えないのですが, 説明変数のスケールから目的変数のスケールにあげる際(学習によって推論する際)に極端にパラメータが大きくなることで, ズレが顕著に現れるのを防ぐことができると考えたからです.

tottocoslowlifer commented 5 months ago

RE. ニューラルネットワークの実装について

correct ラベルが直線になっているのは違和感がありますね.

修正し,コミットいたしましたので,再度ご確認いただけたら幸いです.

説明変数のスケールから目的変数のスケールにあげる際(学習によって推論する際)に極端にパラメータが大きくなることで, ズレが顕著に現れるのを防ぐことができる

ご回答ありがとうございます.

現状,元のスケールに引き戻す作業を「真の値」と「予測値」のそれぞれに行っているのですが,それでは正規化の意味がないような気がしてしまいます. そうではなく,「真の値と予測値との差」に関して引き戻すということでしょうか.

よろしくお願いいたします.

victor-von-pooh commented 5 months ago

RE. ニューラルネットワークの実装について

そうではなく,「真の値と予測値との差」に関して引き戻すということでしょうか.

あまりそこに意味はないと思います.

現状,元のスケールに引き戻す作業を「真の値」と「予測値」のそれぞれに行っているのですが,それでは正規化の意味がないような気がしてしまいます.

そもそも, 説明変数に標準化をかけるのは, 特徴量ごとの平均を0, 分散を1に揃えることにあります. それにより, 予測の方向性を定めることができます. 説明変数のスケールが平均0, 分散1であるのに対し, 目的変数のスケールが平均5000弱, 分散100(?)などでは, 出力層の重みのパラメータが5000などとなり, 非常に誤差が現れやすくなります. 一度目的変数(真の値)を標準化してルールをつけることにより, 説明変数と似たスケール感で予測した結果に対して引き戻してあげることで予測の誤差を小さくしようという試みでした. ニューラルネットワークの細かい仕様がわからないので, 重回帰分析のように標準化の必要が無いかもしれないし, 標準化することによって精度を確実に上げられるかもしれないという実験的な検証をすることに意味があると思います.

tottocoslowlifer commented 5 months ago

RE. ニューラルネットワークの実装について

なるほど,ちょうど「標準化の必要があるかどうか」を検証する試みだったのですね. 流れを掴みきれていませんでした.

ありがとうございます.

tottocoslowlifer commented 3 months ago

ZOOMミーティングの設定(1)

明日のミーティングについて、Googleカレンダーに招待を送らせていただきました.ご確認の程よろしくお願いいたします.