トップコントリビューター
余り: -x^6+1
x^15-1 は (x^8-x^7+x^5-x^4+x^3-x+1)で割り切れることを利用:
x^15-1=(x^8-x^7+x^5-x^4+x^3-x+1)(x^7+x^6+x^5-x^2-x-1)
(x^n-1)=(x-1)(x^(n-1)+x^(n-2)+….+x+1)
よって(x^n – 1) mod (x-1)=0
同様に (x^(15n) -1 ) mod (x^15-1)=0
f(x)=(x^9844055220-x^9804869601)
= x^9844055220-1-(x^9804869601-1)
=(x^15a-1)- (x^6(x^15b)-1)
ここで a,bは整数 (a=9844055220/15, b=9804869595/15)
-x^6(x^15b)-1 = -(x^6+1)(x^15b-1)+(x^15b-1)-(x^6-1)
∴ f(x)= (x^15-1)g(x)-x^6+1 とおけるから、余りは-x^6+1
What is retrieval-augmented generation, and what does it do for generative AI? – The GitHub Blog
組織がRAGを使用するAIツールを求めるのは、カスタムモデルのトレーニングの手間と費用をかけずに、RAGツールが独自のデータを認識できるようにするためです。RAGはまた、モデルを最新の状態に保ちます。RAG を使用せずに回答を生成する場合、モデルはトレーニング時に存在していたデータのみを利用できます。一方、RAGでは、モデルは新しい情報のプライベートデータベースを活用して、より多くの情報に基づいた応答を行うことができます。
GitHub Next のリサーチ担当シニア ディレクターである Idan Gazit 氏とソフトウェア エンジニアの Colin Merkel 氏に、RAG の詳細と、生成 AI ツールでの使用方法についてお話を伺いました。
なぜみんながRAGについて語っているのか
ジェネレーティブAIツールのアウトプットを常に検証すべき理由の1つは、トレーニングデータに知識の締め切り日があるからです。モデルは要求に合わせて調整された出力を生成できますが、参照できるのはトレーニング時に存在していた情報のみです。しかし、RAGを使用すると、AIツールはモデルのトレーニングデータ以外のデータソースを使用して出力を生成でき
RAGとファインチューニングの違い
現在、ほとんどの組織は独自の AI モデルをトレーニングしていません。代わりに、事前トレーニング済みのモデルを特定のニーズに合わせてカスタマイズし、多くの場合、RAGまたは微調整を使用します。ここでは、この2つの戦略の違いを簡単に説明します。
微調整にはモデルの重みの調整が必要であり、その結果、特定のタスクに優れた高度にカスタマイズされたモデルが得られます。これは、特殊な言語で記述されたコードベースに依存している組織にとって、特にその言語がモデルの元のトレーニング データで適切に表現されていない場合に適したオプションです。
一方、RAGは重量調整を必要としません。代わりに、さまざまなデータソースから情報を取得して収集し、プロンプトを補強することで、AIモデルがエンドユーザーにとってよりコンテキストに関連性の高い応答を生成します。
一部の組織では、RAGから始めて、より具体的なタスクを実行するためにモデルを微調整します。他の組織では、RAGがAIのカスタマイズだけでも十分な方法であると考えています。
AI モデルによるコンテキストの使用方法
AIツールが有用な応答を生成するには、適切なコンテキストが必要です。これは、人間が決断を下したり、問題を解決したりするときに直面するのと同じジレンマです。行動を起こすための適切な情報がなければ、それを行うのは困難です。
それでは、生成AIのコンテキスト(😉)でコンテキストについて詳しくお話ししましょう。
- 今日のジェネレーティブAIアプリケーションは、トランスフォーマーとして構造化された大規模言語モデル(LLM)によって強化されており、すべてのトランスフォーマーLLMには、1つのプロンプトで受け入れることができるデータ量であるコンテキストウィンドウがあります。コンテキスト ウィンドウのサイズには制限がありますが、より強力なモデルがリリースされるにつれて大きくなる可能性があり、今後も大きくなる可能性があります。
- 入力データは、AI ツールの機能によって異なります。たとえば、IDE の GitHub Copilot の場合、入力データは、現在作業中のファイル内のすべてのコードで構成されます。これは、Fill-in-the-Middle (FIM) パラダイムによって可能になり、GitHub Copilot はカーソルの前 (プレフィックス) とカーソルの後 (サフィックス) の両方のコードを認識できます。また、GitHub Copilot は、開いている他のタブのコード
function [J grad] = nnCostFunction(nn_params, …
input_layer_size, …
hidden_layer_size, …
num_labels, …
X, y, lambda)
%NNCOSTFUNCTION Implements the neural network cost function for a two layer
%neural network which performs classification
% [J grad] = NNCOSTFUNCTON(nn_params, hidden_layer_size, num_labels, …
% X, y, lambda) computes the cost and gradient of the neural network. The
% parameters for the neural network are “unrolled” into the vector
% nn_params and need to be converted back into the weight matrices.
%
% The returned parameter grad should be a “unrolled” vector of the
% partial derivatives of the neural network.
%
% Reshape nn_params back into the parameters Theta1 and Theta2, the weight matrices
% for our 2 layer neural network
Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), …
hidden_layer_size, (input_layer_size + 1));
Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), …
num_labels, (hidden_layer_size + 1));
% Setup some useful variables
m = size(X, 1);
% You need to return the following variables correctly
J = 0;
Theta1_grad = zeros(size(Theta1));
Theta2_grad = zeros(size(Theta2));
% ====================== YOUR CODE HERE ======================
% Instructions: You should complete the code by working through the
% following parts.
%
% Part 1: Feedforward the neural network and return the cost in the
% variable J. After implementing Part 1, you can verify that your
% cost function computation is correct by verifying the cost
% computed in ex4.m
%
% Part 2: Implement the backpropagation algorithm to compute the gradients
% Theta1_grad and Theta2_grad. You should return the partial derivatives of
% the cost function with respect to Theta1 and Theta2 in Theta1_grad and
% Theta2_grad, respectively. After implementing Part 2, you can check
% that your implementation is correct by running checkNNGradients
%
% Note: The vector y passed into the function is a vector of labels
% containing values from 1..K. You need to map this vector into a
% binary vector of 1’s and 0’s to be used with the neural network
% cost function.
%
% Hint: We recommend implementing backpropagation using a for-loop
% over the training examples if you are implementing it for the
% first time.
%
% Part 3: Implement regularization with the cost function and gradients.
%
% Hint: You can implement this around the code for
% backpropagation. That is, you can compute the gradients for
% the regularization separately and then add them to Theta1_grad
% and Theta2_grad from Part 2.
%
% recode y to Y
I = eye(num_labels);
Y = zeros(m, num_labels);
for i=1:m
Y(i, :)= I(y(i), :);
end
% feedforward
a1 = [ones(m, 1) X];
z2 = a1*Theta1′;
a2 = [ones(size(z2, 1), 1) sigmoid(z2)];
z3 = a2*Theta2′;
a3 = sigmoid(z3);
h = a3;
% calculte penalty
p = sum(sum(Theta1(:, 2:end).^2, 2))+sum(sum(Theta2(:, 2:end).^2, 2));
% calculate J
J = sum(sum((-Y).*log(h) – (1-Y).*log(1-h), 2))/m + lambda*p/(2*m);
% calculate sigmas
sigma3 = a3.-Y;
sigma2 = (sigma3*Theta2).*sigmoidGradient([ones(size(z2, 1), 1) z2]);
sigma2 = sigma2(:, 2:end);
% accumulate gradients
delta1 = (a1’*sigma2);
delta2 = (a2’*sigma3);
% calculate regularized gradient
r1 = (lambda/m)*[zeros(size(Theta1, 1), 1) Theta1(:, 2:end)];
r2 = (lambda/m)*[zeros(size(Theta2, 1), 1) Theta2(:, 2:end)];
Theta1_grad = delta1′./m + r1;
Theta2_grad = delta2′./m + r2;
% ————————————————————-
% =========================================================================
% Unroll gradients
grad = [Theta1_grad(:) ; Theta2_grad(:)];
end