[AI_Math][2주차_기본과제_2] einsum기본문제
einsum기본문제
[AI_Math]기본2_einsum기본문제
einsum을 활용하여 행렬 및 텐서 연산을 NumPy코드로 구현하기
행렬 XY의 trace값 계산하기
import numpy as np
def get_answer1(number_matrix1, number_matrix3):
# einsum으로 두 행렬의 곱을 연산
mid1 = np.einsum('ik, kj -> ij',number_matrix1, number_matrix2)
# einsum으로 trace연산
answer1 = np.einsum('ii -> ', mid1)
return answer1
np.einsum(’ik, kj → ij’,matrix1,matrix2) :matrix1과 matrix2에서 k개의 열과 k개의 행을 내적한다.
np.einsum(’ii→ ’,mid1) : mid1에서 trace연산을 한다(ii인덱스를 갖는 벡터를 모두 더한다)
텐서 X, Y의 3차원 텐서곱에 대해 첫 번째 축을 따라 합계 계산하기
import numpy as np
def get_answer2(number_tensor1, number_tensor2):
# einsum으로 3차원 텐서곱을 진행하기
mid2 = np.einsum('ijk, ikl -> ijl',number_tensor1, number_tensor2)
# 첫번째 축을 없애고, 나머지를 더해서 합을 계산
answer2 = np.einsum('ijl -> jl',mid2)
return answer2
mid2는 예시에 맞춰서 차원을 einsum의 인자로 넘겨주었다. → 따로 transpose해서 곱하지 않아도, einsum연산에서는 알아서 인자의 차원을 맞춰서 곱해줌
number_tensor1 (array): integer 값으로만 구성된 array shape:(2,3,2)
ex - [[[1, -3], [-2, 3], [ 3, 4]],
[[1, -4], [ 2, 1], [-4, 4]]]
number_tensor2 (array): integer 값으로만 구성된 array shape:(2,2,3)
ex - [[[-3, -3, -2], [-3, 3, -3]],
[[-1, -2, -1], [-3, -3, -1]]
텐서 X, Y의 4차원 텐서곱에 대해 2차원으로 reshape한 후에, 주어진 행렬을 곱한 최종 행렬의 대각성분 합계 계산하기
einsum과 einops를 사용해서 구현하자
import numpy as np
import einops
def get_answer3(number_tensor1, number_tensor2, number_matrix3):
# 예시에 맞게 3차원 텐서끼리 곱해서 4차원 텐서곱 만들기
mid3_1 =np.einsum('b l n, j n k -> b l j k',number_tensor1, number_tensor2)
# einops의 rearrange를 이용해서 4차원 행렬은 2차으로 reshape하기
mid3_2 = einops.rearrange(mid3_1, 'b m n k -> (b m) (n k)')
# einsum을 이용해서 인자로 받은 행렬을 곱하기
mid3_3 = np.einsum('ij, jk -> ik',mid3_2, number_matrix3)
# einsum을 이용해서 trace연산 하기
answer3 = np.einsum('ii -> ',mid3_3)
return answer
주어진 두 텐서의 4차원 텐서곱을 2차원으로 reshape한 행렬의 대각성분의 합을 반환함
Parameters:
number_tensor1 (array): integer 값으로만 구성된 array
ex - [[[1, -3], [-2, 3], [ 3, 4]],
[[1, -4], [ 2, 1], [-4, 4]]]
number_tensor2 (array): integer 값으로만 구성된 array
ex - [[[-3, -3, -2], [-3, 3, -3]],
[[-1, -2, -1], [-3, -3, -1]]]
number_matrix3 (array): integer 값으로만 구성된 array
es - [[-4, 2, -2, -3, -4, -1], [-4, 2, -4, 4, -4, 4],
[-4, 2, -3, 3, 2, 4], [-1, -4, 3, 0, 0, 1],
[-2, -1, -1, -3, 2, -2], [ 0, 2, 4, 3, 0, -1]]
Returns:
answer3 (number): 주어진 연산을 마친 결과
Examples:
>>> number_tensor1 = [[[1, -3], [-2, 3], [ 3, 4]],
[[1, -4], [ 2, 1], [-4, 4]]]
>>> number_tensor2 = [[[-3, -3, -2], [-3, 3, -3]],
[[-1, -2, -1], [-3, -3, -1]]]
>>> number_matrix3 = [[-4, 2, -2, -3, -4, -1], [-4, 2, -4, 4, -4, 4],
[-4, 2, -3, 3, 2, 4], [-1, -4, 3, 0, 0, 1],
[-2, -1, -1, -3, 2, -2], [ 0, 2, 4, 3, 0, -1]]
>>> import basic_math as bm
>>> bm.get_answer3(number_tensor1, number_tensor2, number_array3)
Continue exploring
더 읽어보기
CTR을 예측할 수 있을리가 없잖아 무리무리!(무리가아니었다!?): nemotron persona
어떤 광고 배너가 잘될지는 결국 집행 비용을 써봐야 알 수 있었다. 배너를 많이 만들 수 있어도, 그중 무엇을 내보낼지 고르는 데는 여전히 돈이 들었다. 집행 전에 후보를 걸러낼 수 있을지 확인하려고 NVIDIA Nemotron Persona-Korea 데이터셋으...
카피 A/B 테스트와 밈으로 광고 성과를 끌어올리기
광고 배너를 자동으로 만들 수 있게 된 뒤에는 어떤 카피를 얹을지가 다음 과제였다. 성과가 높은 카피, 재밌는 카피에는 정해진 Ground Truth가 없었다. 여러 톤앤매너와 밈 RAG로 후보를 만들고 실제 광고 성과를 비교했다.
성과가 난 광고에서 다음 스토리를 찾는 위닝앵글 검색
초기 AX 제작은 좋아요 랭킹 순으로 스토리를 넓게 탐색하는 방식이었다. 이후에는 이미 성과가 난 광고에서 다음 후보를 찾는 경로를 만들었다. 다른 팀원이 만든 에이전트의 광고 성과 분석과 인사이트를 받아, 비슷한 소구점이나 이미지를 가진 새로운 스토리를 발굴하는...