ITエンジニア ノイのブログ

ITエンジニアのノイです。 YouTubeで ITエンジニアのお勉強という学習用の動画を公開しています。チャンネル登録お願いします!https://m.youtube.com/channel/UCBKfJIMVWXd3ReG_FDh31Aw/playlists

DeprecationWarning: scipy.sin is deprecated and will be removed in SciPy 2.0.0

DeprecationWarning

このエラーはscipy.sinが非推奨(deprecated)であり、将来のSciPyバージョンでは削除される可能性があることを示しています。 例えば、Python でtransformerのPositional encodingのコードです。

%matplotlib inline
import numpy as np
from scipy import sin, cos

max_length = 20 # 時間次元
dmodel = 50 # 単語埋め込みの次元

PE_mat = np.zeros((max_length, dmodel))

for pos in range(max_length):
    for i in range(dmodel):
        if i%2==0: #偶数番目
            PE = sin(pos/10000**(2*i/dmodel))
        else: #奇数番目
            PE = cos(pos/10000**(2*i/dmodel))
        PE_mat[pos, i] = PE

この時、次のようなWarningが発生します。

: DeprecationWarning: scipy.sin is deprecated and will be removed in SciPy 2.0.0, use numpy.sin instead
  PE = sin(pos/10000**(2*i/dmodel))
DeprecationWarning: scipy.cos is deprecated and will be removed in SciPy 2.0.0, use numpy.cos instead
  PE = cos(pos/10000**(2*i/dmodel))

対応策

対応策は簡単です。PE = np.sin(pos / 10000 ** (2 * i / dmodel))のようにnumpyを使ってあげれば解決です。

youtu.be

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版 (EXAMPRESS) [ 一般社団法人日本ディープラーニング協会 ]

価格:3,080円
(2023/8/16 20:42時点)
感想(5件)

DALL-E 3の活用方法 – ChatGPTから画像生成

今回は画像生成のAI技術であるDALL-E 3について、その使用方法や規約に焦点を当ててご紹介します。

DALL-E 3の利用方法

DALL-E 3は皆さんが普段使っているChatGPTにプロンプトを入力して使うことができます。 ChatGPT PlusではプラグインでDALL-Eを追加することができます。

生成例

マルチモーダルAIをイメージした画像のプロンプトを作成します。この画像は、テキスト、画像、音声などの異なる入力モードを統合して情報を処理するAIの概念を表現します。画像の中央には、複数のセンサーとインターフェースを備えた未来的なAIユニットを配置し、その周囲にはテキスト、画像、音声波形を表すシンボルを浮遊させます。全体の色合いは青と銀色を基調とし、高度なテクノロジーと知性を象徴するようなデザインにします。サイズは標準の1024x1024で、2つの画像を生成します。

出力結果

利用規約

Open AIのサイトを見るとDALL-Eのコンテンツポリシー、利用規約はこのように書かれています。

コンテンツポリシーおよび利用規約に従う限り、DALL-Eで作成した画像の所有権はあなたにあります。これには、無料または有料のクレジットを通じて生成された画像に関係なく、再印刷、販売、商品化の権利も含まれます。
https://help.openai.com/en/collections/3643409-dall-e-content-policy

まずはじめに、DALL-Eで生成された作品についてですが、幸いなことにこれらの作品は自由に使用できます。ただし、作品を生成する際には著作権などの法的な側面を忘れずに考慮する必要があります。これは、元となる素材が著作権に抵触する可能性があるためです。

DALL-E 3の利用

ChatGPTやMicrosoftのBing Image Creatorというプラットフォームで利用可能です。これらのサービスを使って、独自の画像を作成することができます。

ChatGPT

具体的な使用可能なサービスについて見ていきましょう。まず、ChatGPTでは、月額20ドルの「ChatGPT Plus」プランと、企業向けの「Enterprise」プランでDALL-E 3を使用できます。これらのプランは、個人ユーザーからビジネスユーザーまで幅広く対応しているのが特徴です。

Microsoft Bing Image Creator

一方で、Microsoft Bing Image Creatorの場合は、個人の非商業目的でのみ使用可能です。つまり、商用利用はできないという点に注意が必要です。しかし、Microsoftアカウントがあれば、DALL-E 3を無料で利用できるという大きなメリットもあります。

DALL-E 3は柔軟な利用が可能で、クリエイティブな活動を支援してくれます。あなたもこの機会に、DALL-E 3を使って、あなただけのユニークな作品を作ってみてはいかがでしょうか。

youtu.be

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版 (EXAMPRESS) [ 一般社団法人日本ディープラーニング協会 ]

価格:3,080円
(2023/8/16 20:42時点)
感想(5件)

BatchNormalization(バッチ正規化)のパラメータgammaとbeta

BatchNormalization

BatchNormalization(バッチ正規化)は、ニューラルネットワークの学習を安定化し、収束を速めるための手法の一つです。これは、各ミニバッチ内での入力データの平均をゼロにし、標準偏差を1に調整することによって、学習の安定性を向上させるものです。 平たく言うと、各層に入れるデータを正規化してあげないと、いきなりとんでもない値が飛び込んできて、変数が安定して収束しなくなっちゃうよ!だから、データを綺麗にしておこう!ってことです。

BatchNormalizationレイヤーの2つのパラメータ

gamma (γ): スケールを調整するパラメータ。学習時に更新される重みで、デフォルトでは1です。 beta (β): シフトを調整するパラメータ。学習時に更新される重みで、デフォルトでは0です。 これらのパラメータは、各特徴量に対して1つずつ存在し、学習中に最適な値に調整されます。gammaは特徴量のスケールを制御し、betaは特徴量のシフトを制御します。これにより、ネットワークが柔軟に学習できるようになり、勾配消失や爆発の問題を軽減します。

BatchNormalizationの実装例

class BatchNormalization:
    def __init__(self, gamma, beta, rho=0.9, moving_mean=None, moving_var=None):
        self.gamma = gamma 
        self.beta = beta 
        self.rho = rho 

        # 予測時に使用する平均と分散
        self.moving_mean = moving_mean   # muの移動平均
        self.moving_var = moving_var     # varの移動平均

        # 計算中に算出される値を保持しておく変数群
        self.batch_size = None
        self.x_mu = None
        self.x_std = None
        self.std = None
        self.dgamma = None
        self.dbeta = None

    def forward(self, x, train_flg=True):
        if x.ndim == 4:
            # 画像形式の場合
            N, C, H, W = x.shape
            x = x.transpose(0, 2, 3, 1) # NHWCに入れ替え
            x = x.reshape(N*H*W, C) # (N*H*W,C)の2次元配列に変換
            out = self.__forward(x, train_flg)
            out = out.reshape(N, H, W, C)# 4次元配列に変換
            out = out.transpose(0, 3, 1, 2) # 軸をNCHWに入れ替え
        elif x.ndim == 2:
            # 画像形式以外の場合
            out = self.__forward(x, train_flg)

        return out

    def __forward(self, x, train_flg, epsilon=1e-8):
        """
        x : 入力. n×dの行列. nはあるミニバッチのバッチサイズ. dは手前の層のノード数
        """
        if (self.moving_mean is None) or (self.moving_var is None):
            N, D = x.shape
            self.moving_mean = np.zeros(D)
            self.moving_var = np.zeros(D)

        if train_flg:
            # 入力xについて、nの方向に平均値を算出.
            mu = np.mean(x, axis=0) # 要素数d個のベクトル

            # 入力xから平均値を引く
            x_mu = x - mu   # n*d行列

            # 入力xの分散を求める
            var = np.mean(x_mu**2, axis=0)  # 要素数d個のベクトル

            # 入力xの標準偏差を求める(epsilonを足してから標準偏差を求める)
            std = np.sqrt(var + epsilon)  # 要素数d個のベクトル

            # 標準化
            x_std = x_mu / std  # n*d行列

            # 値を保持しておく
            self.batch_size = x.shape[0]
            self.x_mu = x_mu
            self.x_std = x_std
            self.std = std
            self.moving_mean = self.rho * self.moving_mean + (1-self.rho) * mu
            self.moving_var = self.rho * self.moving_var + (1-self.rho) * var
        else:
           #  予測時
            x_mu = x - self.moving_mean # n*d行列
            x_std = x_mu / np.sqrt(self.moving_var + epsilon) # n*d行列

        # gammaでスケールし、betaでシフトさせる
        out = self.gamma * x_std + self.beta # n*d行列
        return out

    def backward(self, dout):
        """
        逆伝播計算
        dout : CNNの場合は4次元、全結合層の場合は2次元
        """
        if dout.ndim == 4:
            # 画像形式の場合
            N, C, H, W = dout.shape
            dout = dout.transpose(0, 2, 3, 1) # NHWCに入れ替え
            dout = dout.reshape(N*H*W, C) # (N*H*W,C)の2次元配列に変換
            dx = self.__backward(dout)
            dx = dx.reshape(N, H, W, C)# 4次元配列に変換
            dx = dx.transpose(0, 3, 1, 2) # 軸をNCHWに入れ替え
        elif dout.ndim == 2:
            # 画像形式以外の場合
            dx = self.__backward(dout)

        return dx

    def __backward(self, dout):
        # betaの勾配
        dbeta = np.sum(dout, axis=0)

        # gammaの勾配(n方向に合計)
        dgamma = np.sum(self.x_std * dout, axis=0)

        # Xstdの勾配
        a1 = self.gamma * dout

        # Xmuの勾配(1つ目)
        a2 = a1 / self.std

        # 標準偏差の逆数の勾配(n方向に合計)
        a3 = np.sum(a1 * self.x_mu, axis=0)

        # 標準偏差の勾配
        a4 = -(a3) / (self.std * self.std)

        # 分散の勾配
        a5 = 0.5 * a4 / self.std

        # Xmuの2乗の勾配
        a6 = a5 / self.batch_size

        # Xmuの勾配(2つ目)
        a7 = 2.0  * self.x_mu * a6

        # muの勾配
        a8 = np.sum(-(a2+a7), axis=0)

        # Xの勾配
        dx = a2 + a7 +  a8 / self.batch_size # 第3項はn方向に平均

        self.dgamma = dgamma
        self.dbeta = dbeta

        return dx

このBatchNormalizationクラスは、バッチ正規化の順伝播と逆伝播を実装しています。

__init__ メソッド:

このメソッドは BatchNormalization クラスのコンストラクタで、バッチ正規化のパラメータを初期化します。

  • gamma: スケール調整のためのパラメータで、学習中に更新されます。
  • beta: シフト調整のためのパラメータで、学習中に更新されます。
  • rho: 移動平均を算出する際に使用する係数です。
  • moving_mean, moving_var: 予測時に使用する平均と分散を保存する変数です。

forward メソッド:

バッチ正規化の順伝播計算を行います。

  • 入力 x は、4次元の画像形式または2次元の形式に対応しています。
  • train_flg=True の場合は学習時、train_flg=False の場合は予測時の計算を行います。
  • 入力 x に対して平均、分散、標準化を計算し、それに対して gamma でスケールし、beta でシフトさせた結果を出力します。
  • 学習時には、移動平均と移動分散も更新します。

__forward メソッド:

実際に順伝播計算を行う内部メソッドです。

  • train_flg=True の場合は学習時、train_flg=False の場合は予測時の計算を行います。

backward メソッド:

バッチ正規化の逆伝播計算を行います。

  • 勾配として受け取った dout に対して、gammabeta の勾配を計算します。
  • X_std の勾配を計算し、それを用いて X_mustdgamma の勾配を求めます。
  • 最終的には、X_mustdgamma の勾配を用いて入力 x の勾配を計算します。

youtu.be

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版 (EXAMPRESS) [ 一般社団法人日本ディープラーニング協会 ]

価格:3,080円
(2023/8/16 20:42時点)
感想(5件)

論文解説 LLMに基づく生成型応答の推論方式

解説する論文

タイトル: Splitwise: Efficient Generative LLM Inference Using Phase Splitting

著者: Pratyush Patel, Esha Choukse, Chaojie Zhang, Íñigo Goiri, Aashaka Shah, Saeed Maleki, Ricardo Bianchini

論文のURL: https://arxiv.org/pdf/2311.18677.pdf

論文発表日: 2023年11月

専門外の人でも分かる解説:

この論文は、大型言語モデル(LLM)に基づく生成型応答の効率的な推論方式を提案しています。LLMの応答生成プロセスは、入力文の入力処理フェーズと、応答文生成のトークン生成フェーズに分けられます。この論文では、これら2つのフェーズを専用のハードウェアに分散処理するSplitwise方式を提案しています。この方式により、各フェーズに最適なハードウェアを利用でき、全体の処理効率を上げられるとしています。

要約:

この論文では、大型LLMの推論要求を構成する2つのフェーズである入力処理フェーズとトークン生成フェーズを分離し、それぞれ異なるハードウェアに処理を割り当てるSplitwiseと呼ばれる技術を提案しています。この技術を用いてコスト、スループット、パワーの観点から最適化されたLLM推論クラスタを設計し、既存方式と比較した評価結果を示しています。

この論文の新しい点:

LLM推論要求を構成する2つの異なる性質を持つ計算フェーズを分離し、各フェーズに最適なハードウェアを利用するSplitwise方式が新しい提案です。

課題点:

Splitwise方式でのフェーズ間のデータ移動オーバーヘッドの影響が十分検討されていない可能性があります。また、実際のクラウド環境での運用性とかかるコストも理論レベルであり、実証実験のデータが必要な部分があるかもしれません。

youtu.be

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版 (EXAMPRESS) [ 一般社団法人日本ディープラーニング協会 ]

価格:3,080円
(2023/8/16 20:42時点)
感想(5件)

im2col

im2colとは

im2colは、画像認識において利用される関数で、主に高速な行列演算を活かすために使用されます。この関数は、効率的なnumpyの操作を可能にします。ループを使用することができますが、これはnumpyの優れた特性を活かす点で劣る方法です。(numpyはforループなどで処理すると効率が低下する傾向があります)

import numpy as np

def im2col(input_data, filter_h, filter_w, stride=1, pad=0, constant_values=0):
    
    # 入力データのデータ数, チャンネル数, 高さ, 幅を取得する
    N, C, H, W = input_data.shape 
    
    # 出力データ(畳み込みまたはプーリングの演算後)の形状を計算する
    out_h = (H + 2*pad - filter_h)//stride + 1  # 出力データの高さ(端数は切り捨てる)
    out_w = (W + 2*pad - filter_w)//stride + 1  # 出力データの幅(端数は切り捨てる)

    # パディング処理
    img = np.pad(input_data, [(0,0), (0,0), (pad, pad), (pad, pad)],
                 'constant', constant_values=constant_values)  # pad=1以上の場合、周囲を0で埋める
    
    # 配列の初期化
    col = np.zeros((N, C, filter_h, filter_w, out_h, out_w)) 

    # 配列を並び替える(フィルター内のある1要素に対応する画像中の画素を取り出してcolに代入する)
    for y in range(filter_h):
        """
        フィルターの高さ方向のループ
        """
        y_max = y + stride*out_h
        
        for x in range(filter_w):
            """
            フィルターの幅方向のループ
            """
            x_max = x + stride*out_w
            
            # imgから値を取り出し、colに入れる
            col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]
            # y:y_max:strideの意味はyからy_maxまでの場所をstride刻みで指定している
            # x:x_max:stride の意味はxからx_maxまでの場所をstride刻みで指定している


    # 軸を入れ替えて、2次元配列(行列)に変形する
    col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N*out_h*out_w, -1) 
    return col

コード解説

N, C, H, W = input_data.shape

input_data は、画像データのミニバッチ(複数の画像が同時に処理される)を表す4次元のNumPy配列です。以下に、各次元の意味を示します:

  • 第1次元 (N): バッチサイズ。同時に処理される画像の数を示します。
  • 第2次元 (C): チャンネル数。画像ごとに異なる色や特徴マップがある場合、それらの数を示します。
  • 第3次元 (H): 画像の高さ。ピクセルの行数を示します。
  • 第4次元 (W): 画像の幅。ピクセルの列数を示します。

具体的な例として、input_dataが次のような場合を考えてみましょう:

import numpy as np

# バッチサイズ: 2, チャンネル数: 3, 画像の高さ: 4, 画像の幅: 4
input_data = np.random.rand(2, 3, 4, 4)

この場合、input_data は2つの画像を含み、各画像は3つのチャンネル(例: 赤、緑、青)を持ち、高さと幅がそれぞれ4ピクセル × 4ピクセルです。このような形式のデータが im2col 関数の入力として与えられます。

y_max = y + stride*out_h

この行のコード y_max = y + stride*out_h は、im2col 関数内のループにおいて、フィルターの高さ方向における最大座標を計算しています。

まず、y はフィルターの高さ方向におけるループ変数で、フィルター内の行を指します。stride はフィルターの移動幅を表し、out_h は畳み込み演算後の出力データの高さを示します。

この式 y_max = y + stride*out_h は、フィルターの高さ方向において、現在の y から stride * out_h を加算した座標を y_max として計算しています。この y_max は、フィルターを適用する際に元画像から切り取る領域の終端(最大座標)を表します。

言い換えれば、この計算によって、現在のフィルター位置から stride * out_h だけ移動した位置が、畳み込み演算の適用範囲における高さの最大座標を示しています。これは畳み込み演算が適用されるフィルターの範囲を指定するために使われます。

同様の考え方が横方向における x_max の計算にも適用されています。

col[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]

この部分のコードは、img というパディング済みの画像データから、フィルター内のある1つの要素に対応する画像中のピクセル値を取り出し、col 配列に格納しています。これは im2col 操作の一部であり、畳み込み演算を行うためのデータの再配置を行っています。

  • col[:, :, y, x, :, :]: col 配列の特定の位置に対応するサブ配列。

    • この位置は、フィルター内のある1つの要素に対応します。
  • img[:, :, y:y_max:stride, x:x_max:stride]: パディング済みの画像データから対応する部分を切り出す。

    • y:y_max:stride は、y から y_max までの範囲を stride 刻みで指定しています。
    • x:x_max:stride は、x から x_max までの範囲を stride 刻みで指定しています。

これにより、col 配列の特定の位置には、元画像から取り出されたフィルターに相当する領域のピクセル値が格納されます。この操作をフィルター内の各位置に対して繰り返すことで、im2col 操作が行われ、畳み込み演算がより効率的に実行されるようになります。

「:」の意味

このコードの:は、NumPyにおいて「すべての要素」を指定するための記号です。具体的には、スライシングにおいてstart:stop:stepの形式で使用され、:が指定された場合は全要素を表します。

col[:, :, y, x, :, :]img[:, :, y:y_max:stride, x:x_max:stride]の部分では、各次元に対して:(コロン)が使用されています。具体的な意味は次の通りです:

  • col[:, :, y, x, :, :]: colの特定の位置に対応する部分行列を指定しています。yおよびxに対応する次元において、:が使われているため、それぞれの次元において全ての要素を取得しています。

  • img[:, :, y:y_max:stride, x:x_max:stride]: imgから特定の領域を切り出すためのスライスを指定しています。ここでも、:(コロン)を使用して各次元において全ての要素を取得していますが、y:y_max:strideおよびx:x_max:strideの部分では、stride刻みでサンプリングするための指定が行われています。

簡単に言うと、:は「全ての要素」を指定するためのものであり、これにより対象の次元全体のデータを操作することができます。

col = col.transpose(0, 4, 5, 1, 2, 3).reshape(Nout_hout_w, -1)

この行のコードは、col 配列の軸を入れ替えてから、2次元の行列に変形しています。 1.col.transpose(0, 4, 5, 1, 2, 3):

  • transpose 関数は、配列の軸を入れ替えます。
  • 引数で指定された軸の順序に従って、col の軸が入れ替えられます。
  • 具体的な引数 (0, 4, 5, 1, 2, 3) では、元の軸の順序を以下のように変更しています:
    • 0 から 0
    • 1 から 4
    • 2 から 5
    • 3 から 1
    • 4 から 2
    • 5 から 3
  • この操作により、col の次元の順序が変更されます。

2.reshape(N*out_h*out_w, -1):

  • reshape 関数は、配列の形状を変更します。
  • 第1引数で指定された形状に変換しますが、-1 を指定することで、残りの次元は自動的に計算されます。
  • 具体的な引数 (N*out_h*out_w, -1) では、col を 2 次元の行列に変形しています。
  • 行数は N*out_h*out_w となり、列数は元の次元数に応じて自動的に計算されます。

これらの操作は、通常は畳み込みニューラルネットワーク (CNN) の処理において、im2col 操作を経て得られたデータを、通常の行列形式に変換するために行われます。

畳み込み演算のサイズ

よく見る公式です。

畳み込み演算のサイズ

このコードは、畳み込み演算やプーリング演算を適用した後の出力データの形状(高さと幅)を計算しています。

# 出力データ(畳み込みまたはプーリングの演算後)の形状を計算する
out_h = (H + 2*pad - filter_h)//stride + 1 # 出力データの高さ(端数は切り捨てる)
out_w = (W + 2*pad - filter_w)//stride + 1 # 出力データの幅(端数は切り捨てる)
  • H: 入力データの高さ
  • W: 入力データの幅
  • filter_h: フィルター(カーネル)の高さ
  • filter_w: フィルターの幅
  • stride: ストライド(フィルターを適用する間隔)
  • pad: パディング(入力データの周囲に追加される枠の数)

1.出力データの高さ (out_h) の計算:

  • (H + 2*pad - filter_h) は、パディングを考慮したフィルターを適用するための縦方向の空間です。
  • //strideストライドによってフィルターを適用する間隔で割る操作です。
  • +1 は、最後のフィルターが入力データの最後まで適用されるように、1 を加えています。
  • 端数は切り捨てるため、整数除算 (//) が使われています。

2.出力データの幅 (out_w) の計算:

  • 同様に、(W + 2*pad - filter_w) は、パディングを考慮したフィルターを適用するための横方向の空間です。
  • //strideストライドによってフィルターを適用する間隔で割る操作です。
  • +1 は、最後のフィルターが入力データの最後まで適用されるように、1 を加えています。
  • 端数は切り捨てるため、整数除算 (//) が使われています。

youtu.be

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版 (EXAMPRESS) [ 一般社団法人日本ディープラーニング協会 ]

価格:3,080円
(2023/8/16 20:42時点)
感想(5件)

Generative AI Test 2023#2 概要と対策

Generative AI Testとは

「Generative AI Test」とは、日本ディープラーニング協会(JDLA)が提供する、生成AIに関する知識と活用スキルを評価するためのミニテストです。このテストは、OpenAIやMidjourneyなどの生成AI技術を安全かつ効果的にビジネスで活用するために必要な知識を確認することを目的としています。また、このテストは生成AI業界で活躍するプロフェッショナルが作成しています。 https://www.jdla.org/certificate/generativeai/

Generative AI Test:試験概要と受験資格

受験資格: - どなたでも受験が可能です。

実施概要:

  • 試験時間: 20分
  • 問題形式:
    • 択一式/多肢選択式:19問
    • 記述式:1問
      • 注記:今回から記述問題が追加され、それに伴い試験時間も変更されています。
  • 実施方法: オンライン実施(PCまたはスマートフォンで受験可能)

出題範囲: - シラバスに基づいた出題が行われます。

受験費用: - 2,200円(税込)


Generative AI Testを通じて目指すべき成果

1. 生成AIの理解と自信の向上:

  • 生成AIの可能性の理解: 「生成AIに何ができるか?」という基本的な疑問に対する答えを得られます。
  • 背景知識の習得: 生成AIがどのように機能するか、その背景にあるロジックを理解します。
  • リスク管理 生成AIを利用する際の注意点、法律や倫理、セキュリティの問題について学びます。

2. 実践的なスキルの習得:

  • ビジネス活用知識: 生成AIをビジネスに活用するための具体的な知識とスキルを習得します。
  • 事例の理解: 生成AIの具体的な活用例を学び、実際のビジネスシーンでの応用方法を掴みます。

3. ビジネスとキャリアへの影響:

  • 革新的なアプローチ: 生成AIを用いた新しい課題解決手段を獲得し、ビジネスに革命をもたらします。
  • DX推進力: デジタル変革(DX)の推進に必要な、「生成AIの活用法」に関する自信と理解を深めます。
  • 新ビジネスチャンスの創出: 生成AIを駆使したビジネスアイデアで新たな価値を生み出し、市場に新風を吹き込みます。
  • DX人材への変貌: 生成AIに関する知識と実績を積み、どの企業でも求められる人材へと成長します。

このテストを通じて、参加者は生成AIの深い理解とともに、ビジネスシーンでの実践的な応用能力を身につけることができます。それにより、自信を持ってデジタル変革をリードし、企業や個人のキャリアにおいて新たな価値を生み出すことが可能となります。

シラバス

生成AI技術の特徴と動向

技術的特徴:

  1. テキスト、画像、音声の生成モデル: これらに共通する確率モデルやハルシネーション(Hallucination)の概念を理解。
  2. 大規模言語モデルの基本構造: 基盤モデル、トランスフォーマー(Transformer)、アテンション(Attention)などの概念を含む。
  3. 学習方法: 教師あり学習、自己教師あり学習、事前学習、ファインチューニングなど。
  4. アラインメント: 人間のフィードバックに基づく学習やインストラクション・チューニングの理解。
  5. 生成のメカニズム: コンテキスト内学習、Zero-Shot、Few-Shot、Chain-of-Thoughtなど。
  6. 性能評価: リーダーボードやベンチマークを通じた評価。

技術動向:

  1. 技術動向の俯瞰: 条件付き生成や拡散モデル(Diffusion Model)など。
  2. オープン化の動向: オープンコミュニティ、オープンソース、データセット、推論の効率化。
  3. 性能の決定要因: スケーリング則、データセットのサイズと質、モデルパラメータ、計算資源。
  4. マルチモーダル化の動向: テキスト、画像、音声などの統合モデルの理解。
  5. 外部ツール・リソースの利用: 学習データの時間的カットオフ、知識の活用、不得意タスクへの対応。

生成AIの特徴と動向の概要

特徴:

  1. ケイパビリティの理解: 生成AIの能力とその範囲を把握。
  2. 活用事例: 生成AIの多様な使用例についての知識。
  3. プロンプトエンジニアリング: 生成AIの性能を拡張するためのテクニック。

動向:

  1. 新たな活用方法の探索: ハッカソン、自主的なユースケース開発、インターネットや書籍を通じた活用方法の探索。
  2. 活用を制限する要因: 生成AIの学習データ、性能評価、言語能力に関連する制約。
  3. 業界特化の活用方法: LLMを利用したサービス(例:ChatGPT、Bard)、RAGの活用、エージェントやコード生成、外部ツールの呼出し、広告クリエイティブへの応用、ドメイン固有の使用法。

生成AIのリスクと動向の概要

リスクの理解:

  1. 技術面・倫理面・法令面・社会面のリスク: 正確性、ハルシネーション、セキュリティ、公平性、プライバシー、透明性、悪用、誤情報の拡散、敵対的プロンプト、生成AIサービスへの依存、環境問題など。
  2. 入力と出力の注意点: 著作権、個人情報、機密情報、商用利用、利用規約に関する認識。

動向:

  1. 新たなリスクと規制化の可能性: 現時点で認識されていないリスクの出現とそれに伴う法規制の可能性。
  2. リスク低減の自主対策: 生成AIの活用に伴うリスクを自主的に低減する方法。

予想問題

例題

問題文: 生成AIのリスクに関する次の記述のうち、正しいものを選んでください。

  1. 生成AIはハルシネーション(幻覚)のリスクがない。
  2. 生成AIの出力は常に公平で偏りがない。
  3. 生成AIはプライバシー保護の観点から利用すべきではない。
  4. 敵対的プロンプトによって生成AIの出力が悪用される可能性がある。

解答: 4

解説: 敵対的プロンプトは、生成AIを意図的に誤った方向に導くために使用される入力で、これによりAIの出力が不適切または悪用される可能性があります。他の選択肢は生成AIのリスクを適切に表していません。

もっと詳しく対策をしたい人

対策動画

  1. アウトプット:予想問題演習 Generative AI Test 対策1 youtu.be

  2. インプット:生成AI解説動画 生成AI×ビジネス youtu.be

ソフトマックス関数

ソフトマックス関数とは

ソフトマックス関数は、複数の数値からなるベクトルを受け取り、それを正規化して確率分布として表現するための関数です。主に機械学習や深層学習の分野で使用されます。この関数は、多クラス分類の出力層や、ニューラルネットワークの最終的な出力を確率分布に変換するために一般的に利用されます。

ソフトマックス関数は、次の式で表されます。

ここで、Nはベクトルの次元数を表し、eは自然対数の底であるネイピア数です。各要素に対して、指数関数を計算し、全ての指数の和で割って正規化しています。

ソフトマックス関数の特性

  1. 正規化性: ソフトマックス関数の出力は0から1の範囲に収束し、それらの合計は1になります。これにより、出力を確率分布として解釈できます。

  2. 強調効果: 入力ベクトルの中で最大の要素が他の要素よりも大きな確率を持つようになります。つまり、最大の要素が他の要素に比べて強調される性質があります。

  3. 微分可能性: ソフトマックス関数は微分可能な関数であり、これが勾配降下法などの最適化アルゴリズムで重要です。

機械学習モデルでは、ソフトマックス関数の出力を使用してクラスの確率分布を得ることができ、最終的な予測を行います。

ソフトマックス関数の図示

ソフトマックス関数を図示するためのPythonコードです

import numpy as np
import matplotlib.pyplot as plt

def softmax(z):
    exp_z = np.exp(z - np.max(z))  # 数値安定性のため、指数関数の計算前に最大値で引く
    return exp_z / np.sum(exp_z)

def plot_softmax(x_values):
    y_values = softmax(x_values)
    
    plt.figure(figsize=(8, 6))
    plt.plot(x_values, y_values, label='Softmax Function')
    plt.title('Softmax Function')
    plt.xlabel('Input Values')
    plt.ylabel('Softmax Output')
    plt.legend()
    plt.grid(True)
    plt.show()

# ソフトマックス関数をプロットするための入力値
x_values = np.arange(-5, 5, 0.1)

# ソフトマックス関数のプロット
plot_softmax(x_values)

ソフトマックス関数

値の比は入力の差に依存する

ソフトマックス関数が入力の差に依存する理由は、指数関数が入力値に対して非常に敏感で急激に増加する性質にあります。具体的には、同じ入力ベクトル (z) の各要素の指数関数を取るため、入力の小さな差異が指数関数の値に大きな差異を生むことになります。

例を挙げてみましょう:

[ z = [2, 1, 0] ]

このとき、各要素の指数関数を計算すると:

[ e2, e1, e0 ]

これらの値はそれぞれ (7.39, 2.72, 1) となります。 計算すると [0.84, 0.11, 0.03] になります。

このように、入力の差が指数関数を介してソフトマックス関数の出力に大きな影響を与えます。その結果、入力値の相対的な大小関係が強調され、確率分布として表現されます。

youtu.be

深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版 (EXAMPRESS) [ 一般社団法人日本ディープラーニング協会 ]

価格:3,080円
(2023/8/16 20:42時点)
感想(5件)