ChatGPTにPyTorchの使い方を手鳥足取り教えてもらう方法

その他の調査

1.ChatGPTにPyTorchの使い方を手鳥足取り教えてもらう方法まとめ

・Stable DiffusionやChatGPTはアイディアやたたき台を迅速に作るのに適したツールとの認識を持っていた
・しかし直近で探求が進んでいるChatGPTの使用例などにはたたき台レベルを大きく超えるものも存在する
・例えば教育分野では個人のペースで学習を進める事を可能にするので家庭教師訳のポテンシャルを持つ

2.ChatGPTに独学を手伝って貰う方法

以下、Twitterよりelvis(@omarsar0)さんの一連の投稿の意訳です。ChatGPTの使い方は様々な人が模索している段階と思いますが、個人的には本スレッドが読んでいて一番変な声がでました。人間は自分が出来ると思っている事をAIに自分より上手にやられてしまうとやっぱりショックを受けますね。

Stable DiffusionChatGPTは何らかのアイディアやたたき台を迅速に作るのに適したツールと認識しているのですが、たたき台というか、うーん、教師も教材も不要な時代がもうすぐ来ちゃいそうだなぁ、と実感します。

アイキャッチ画像はstable diffusionをアニメ系のイラストで微調整した2023年1月1日公開のWaifu Diffusion 1.4 Animeで、あまりにAIが発達しすぎた反動でラッダイト運動が成功して世界文明が退行してメイン動力が蒸気機関になったスチームパンクの世界観を想像して生成したイラスト。ちょっと大きめだけれども、テトもちゃんとテトとして描けました。しかし、ナウシカにちょっとテトが混ざってしまっているようにも見えますね。

1/7投稿

今週は以下の作業にChatGPTを使ってみました。

・Pythonスクリプトのレビュー
・機械学習職の採用の準備
・コーディング面接対策
・デザインのレクチャー
・ 技術的な問題の解決
・ 新しいフレームワーク、アルゴリズム、数学の学習
・マーケティング戦術の設計

興奮しました!
完璧ではありませんが、良くなっていくでしょう。使用例のリストは増え続けています。

文脈、微調整指示、サンプルを提供すればするほど良くなるます。

従来は、これらの作業(特に教育分野)のほとんどに、多くの研究と時間が必要でした。現在では、自分の経験や知識を基に、ChatGPTから提案や新しいアイデアを得て、それに応じて改良しています。

このやり方が未来の作業の形になるのかどうかは全く分かりません。これらのタスクは全て一日に思いついたプロジェクトや学習セッション用のランダムなアイデアです。

ChatGPTから答えを期待しているわけではありません。私が求めているのは、インスピレーションや着手前のアイディアだけだったりします。

この技術に依存することを恐れているわけではありません。
ただ、もっと共同で作業できるようなり、私の考え方や仕事のやり方に合わせたものにしてほしいです。間違ってそこから学習して貰う事も良いです。それはgithub Copilotも同じです。常にコードを与えて欲しいわけではなく、必要なときだけ与えてくれればいいのです。

もし同じような解決策を作っている人がいたら、ぜひ試してみたいですね。私は、言語モデルによって動いているシステムをうまく利用する方法を考え、実験するのが大好きです。ここに挙げた使用例や、それ以外にもたくさんのアイデアやフィードバックがあり、現在も製作中です。

1/13投稿

ChatGPT を使用して PyTorch を学習する方法に興味があります。

これまでの使用方法は以下のとおりです。

注:私はPyTorchの使い方を上級レベルで知っていますが、ただの初心者の場合、役に立つかどうか知りたかっただけなのです。

結果は完璧ではありませんが、期待できます。

ちょっとしたプロンプトによる魔法と、自分が何を求めているのかをよく考えることで、興味深いガイダンスを得ることができるのです。

私はまず、自分が「初心者(beginner)」であると設定し、勉強の計画を立ててもらうようにしました。

Q.PyTorch を使った機械学習について学びたいです。私は初心者です。実際に操作できる形式で練習する学習計画を立てることはできますか?
A.かしこまりました。
初心者として PyTorch を使用して機械学習を学習するための一般的な学習計画は次のとおりです。

1. PyTorch をインストールして、基本的なテンソル操作に慣れることから始めます。 PyTorchmのWebサイト、またはYouTubeなどの他のオンライン リソースでチュートリアル を見つけることができます。
2. テンソルに慣れたら、ニューラル ネットワークの理解に進みます。 単純な全結合ネットワークから始めて、畳み込みニューラル ネットワーク(CNN)や再帰型ニューラル ネットワーク(RNN)などのより 高度なアーキテクチャに進むことができます。
3. MNIST、CIFAR-10、IMDB データセットなどの小さなデータセットで、さまざまな タイプのニューラル ネットワークの構築とトレーニングを練習します。
4. ニューラル ネットワークの構築とトレーニングに慣れたら、次に進みます。
転移学習、事前トレーニング済みモデルの微調整、データ拡張などのより 高度な概念に対応します。
5. ImageNet や NLP データセットなどのより複雑なデータセットでモデルの 構築とトレーニングを練習します。6. 研究論文を読み、結果を再現してみて、その背後にある直感を理解してください。
7. Kaggle コンテストに参加して、実世界のデータセットを実際に体験し、他の人々が同様の問題にどのように取り組んでいるかを確認します。
8. 最後に、新しいモデルとテクニックの練習と実験を続けます

上のリストの注意点ですが、おそらく下に行くほど、より多くの経験が必要になるように見えます。

学習計画を見て、自分の知識レベルに応じたトピックに絞るようにしたいと思います。私は全くの初心者なので、最初の項目に焦点を当てたと仮定しましょう。

Q.PyTorch を使用した基本的なテンソル演算について学習するためのレシピを教えてください
A.かしこまりました。
PyTorch で基本的なテンソル操作を始めるための学習レシピは次のとおり です。
1. PyTorch のインストール: PyTorch Web サイト (https://pytorch.org/) の指示に従って、PyTorch をインストールできます。マシンに適したバージョンの PyTorch (CPU または GPU のバージョンなど) と正しいバージョンの Python がインストールされていることを確認してください。
2. テンソルの作成と操作: いくつかの基本的なテンソルを作成し、それらを操作するさまざまな方法を試すことから始めます。練習するいくつかの基本的なテンソル 操作には、次のものがあります。
・さまざまな形状とタイプのテンソルの作成 (例: 1D、2D、3D テンソル、 float、int など)
・テンソルのインデックスとスライス操作
・テンソルの再形成
・テンソルの転置
・要素単位の演算(例: 足し算、引き算、掛け算など)
・テンソルのブロードキャスト3. PyTorch Autograd について学習
PyTorch は自動微分(autograd)と呼ばれる手法を使用して、テンソルの勾配を 自動的に計算できるようにします。テンソルで autograd を有効または無効にする方法を学びます。

次に、このトピックに関する特定のコードサンプルを提供するように依頼します。コードサンプルがこの事を学ぶための最良の方法だからです。

質問は非常に基本的なものであることに注意してください。前述のchatGPTの提案を引用した上で依頼しています。

Q.「異なった種類と形状のテンソルを作成する(例:一次元、二次元、三次元のテンソル。float, int等)」のnotebookを提供して貰えませんか?

A.もちろんです。以下に、PyTorchで異なる形状と型のテンソルを作成する方法を示す簡単なJupyter notebookがあります。

import torch

# Create a 1D tensor of integers
x = torch.tensor ([1, 2, 3, 4], dtype=torch.int32)
print("x: ", x)

# Create a 2D tensor of floats
y = torch. tensor ([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float32)
print("y: ", y)

# Create a 3D tensor of booleans
z = torch.tensor ([[[True, False], [False, True]], [[False, True], [True, False]]], dtype=torch.bool)
print("z: ", z)

# Create a tensor with random values
w = torch.randn(2, 2)
print("w: ", w)

上記のコードは問題なく動作するようです。難易度はよくわかりませんが、問題ないと思います。

確信が持てない場合は、いつでもそれが生成しているものについての詳細な説明を求めることができます。簡単な説明を提供してくれますが、より詳細な説明を求めることもできます。前述の例です。

A.このnotebookは4つの異なったテンソルを作成します。
・整数の一次元テンソル (x)
・浮動小数点の二次元テンソル (y)
・ブール値の三次元テンソル (z)
・ランダム値の二次元テンソル (w)テンソルの形状、データ型、値を変更することで、様々なバリエーションを練習することができます。また、torch.from_numpy()メソッドを用いてnumpy配列からテンソルを作成したり、tensor.numpy()メソッドを用いてテンソルをnumpy配列に変換することができます。

import numpy as np

#Converting numpy array to tensor
numpy_array = np.array([1,2,3])

tensor_from_numpy torch.from_numpy(numpy_array)
print("Tensor from numpy array: ", tensor_from_numpy)

#Converting tensor to numpy array
tensor_to_numpy = tensor_from_numpy.numpy()
print("numpy array from tensor:", tensor_to_numpy)

トピックについてさらに深く掘り下げることができます。このタイプのシステムは、文脈を活用する能力が向上しており、こういったケースでは非常に重要になります。

私は基本的なテンソル操作についてもっと提案し続けるように依頼し、その結果、素晴らしいリストが作成されました。

Q.基本的なテンソル操作についてもっと教えてください。

A.かしこまりました。

PyTorchで練習できる基本的なテンソル演算をいくつか紹介します。

(1)添え字とスライス(Indexing and slicing)
添え字付けやスライスによって、テンソルの個々の要素にアクセスすることができます。これはテンソルの特定の部分を取り出したり、個々の要素を変更するのに便利です。

(2)リシェイプ(Reshaping)
テンソルの要素数を変えずに、テンソルの形状を変更することができます。reshape()関数はこのために用いることができます。

(3)転置(Transposing)
t()関数あるいはtranspose()関数を用いてテンソルの要素を入れ替えることができます。これは、テンソルの次元を変更する際に有効です。

(4)要素毎の演算(Element-wise operations)
テンソルに対して、加算、減算、乗算、除算などの要素ごとの演算を行うことができます。これはテンソルに対する数学的な演算を行う際に有用です。

(5)ブロードキャスト(Broadcasting)
テンソルの次元が何らかの形で一致する限り、異なる形状のテンソルに対して演算を行うことができます。これをブロードキャストと呼び、異なる形状のテンソルに対して演算を行う際に有用です。

(6)連結と積み重ね(Concatenation and Stacking)
複数のテンソルを特定の次元に沿って連結したり積み重ねたりするには、それぞれ torch.cat(), torch.stack() を使用します。

次に、上のリストから1つの項目について、注釈を添えてより詳細な例を挙げてもらいました。

さらに説明が必要な場合に役立つかもしれない注釈を付けて尋ねるのです。貴方がより深く/広く学ぶにつれて、この能力は重要になります。

Q.「2つ以上のテンソルを使ったブロードキャスト」の注意点など、詳しい例を教えてください。torch.einsum(アインシュタインの縮約記法)関数を使って、2つ以上のテンソルを使ったブロードキャストを行うことができます。
A.かしこまりました。
以下では、PyTorchで2つ以上のテンソルを扱うブロードキャストを行うために`torch.einsum`(アインシュタインの縮約記法)関数を使用する詳細な例を示します。

import torch

# Create three 2D tensors
a = torch.randn(2, 3)
b = torch.randn(3, 2)
c = torch.randn(2, 2)

# Perform element-wise multiplication using Einstein notation
result = torch.einsum("ij, jk, ik -> ij", a, b, c)

print("result:", result)

この例では、3つの2次元テンソル `a`, `b`, `c` を作成し、それぞれ異なる形状を持つようにします。次に、`torch.einsum` 関数を使ってこれらのテンソルの要素ごとの乗算を行い、その結果を新しいテンソル `result` に代入しています。

chatGPTによる解説は以下の通りです。
説明の正確さを確認したわけではありませんが、ざっと見たところ、まともそうです。

torch.einsum関数に渡される最初の引数はテンソルの添字を表す文字列です。
この文字列は “input indices -> output indices” の形式です。この例では、3つのテンソルがあるので、3組の入力インデックスがあります。各インデックスの組は3つのテンソルのうちの1つに対応します。torch.einsum関数の第2引数には、ブロードキャストされるテンソルを指定します。ここでは、最初のテンソル “a” は形状が (2, 3) であり、2番目のテンソル “b” は形状が (3, 2) であり、3番目のテンソル “c” は形状が (2, 2) です。文字列 “ij, jk, ik -> ij”は、これらのテンソルの添字がどのように一致しているかを記述しています。インデックス “i”, “j”, “k” はテンソルの次元を表すために使われます。i” と “j” は1番目のテンソルの次元を、”j” と “k” は2番目のテンソルの次元を、”i” と “k” は3番目のテンソルの次元を表しています。結果として得られるテンソル `result` は、入力インデックスの次元 “i” と “j” を結合して得られる(2,2)の形状を持ちます。この例では、`torch.einsum` 関数を用いて2つ以上のテンソルに対して要素ごとの乗算を行う方法を示しました。

また、`torch.einsum` 関数を用いて、入力と出力のインデックスを変えて、内積や行列の乗算など他の種類の演算を行うことができます。注意点として、`torch.einsum`関数は計算量が多いので、PyTorchの標準関数で表現できない演算を行う場合のみ使用するとよいでしょう。

そして、トピックの間を行ったり来たりしながら、深く掘り下げたり、詳しい説明を求めたり、コードを増やしたり、教材のレベルを上げ続けることができます。このように個人に合わせて学習できるのは魅力的です。

今回紹介したのは簡単な実験であり、完璧ではありません。私は学習者のためにもっと多くの事例を探求し、文書化し続けるつもりです。しかし、本事例のレベルでも更にもっと多くのことができます。もし私がコンテンツのレベルをどんどん上げたいと思ったら、どうなるのか興味があります。これは試してみたいことです。すぐにやってみましょう!

今思い浮かんだのは、習得した知識をテストし、学習した概念をより深く身につけるための簡単な演習を設計することです。以下ではChatGPTの提案を紹介します。

Q.今まで習ったことを復習したいです。私の知識を試すために簡単な演習を用意してもらえますか?

A.かしこまりました。

PyTorchの基本的なテンソル演算の知識を試すための簡単な演習を用意しました。

(1)torch.randn() 関数を使ってランダムな値で満たされた形状(3, 4)の2D テンソルを作成する
(2)形状(12,)を持つ1次元テンソルにリシェイプする
(3)テンソルを転置し、その結果を表示する
(4)torch.tensor()関数を用いて1, 2, 3, 4の数値で埋めた形状(4,)の1次元テンソルを作成する
(5)2次元テンソルと1次元テンソルの間で要素毎の加算を行い、結果を表示する
(6)2次元テンソルの第2軸に沿って最小値を求め、その結果を表示する
(7)数値5,6,7で埋めた形状(3,1)のテンソルをもう一つ作成する
(8)2次元テンソルと新しいテンソルの間でブロードキャストを行い、その結果を表示する
(9)数値1, 2, 3, 4 の数で埋めた形状(2, 2)のテンソルと 5, 6, 7, 8 の数で埋めた形状(2, 2)のテンソルを作成する
(10)torch.einsum関数を使って、2つのテンソルの内積を計算する

そして、解答の正しさをチェックすることができるのでしょうか?これはたぶん難しいと思うのですが、最初の2つの練習問題については大丈夫なようです。解説もついています。すごい!

Q.最初の2つの練習問題に対する私の解答が正しいかどうか、チェックしてもらえますか?

python import torch

#1
tensor = torch.randn(3, 4)

#2
tensor = tensor.view(-1)
A.はい。
最初の2つの練習問題に貴方が提供したコードは正しいです。最初の行で、あなたは torch.randn() 関数を使ってランダムな値で満たされた (3, 4) 形状の 2D テンソルを作っています。これは3行4列の2次元テンソルを作成し、テンソルの各要素にランダムな浮動小数点値を割り当てています。2行目では、テンソルを形状(12,)の1次元テンソルにリシェイプしています。
view()関数はテンソルの形状を変更するために使用され、-1引数は要素の総数に基づいて1次元のサイズを推測するようにPyTorchに指示しています。これはテンソルを12要素の1次元テンソルにリシェイプし、元の2次元テンソルを平坦化することと同じです。全体として、あなたは正しく torch.randn() 関数でテンソルを・・・

まとめると、この新しい形式の学習の最も際立った特徴とは、私の意見によれば、自分のペースで学習できることです。自分のペースで学習する事は必要です。すべてのトピックを同じペースで学習することはできません。 ChatGPT を使用すると、プレッシャーを感じません。気を散らすことが少なくなり、目標に集中できるようになりました。

3.ChatGPTにPyTorchの使い方を手鳥足取り教えてもらう方法関連リンク

1)twitter.com
elvis@omarsar0 1月7日
elvis@omarsar0 1月13日

タイトルとURLをコピーしました