ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 52일차 - 파이썬 AI수학 기초
    AI 솔루션 개발자과정(Java, Python) 2022. 12. 20. 17:51

    10일차에서 이어지는 내용.

     

    함수

    수학에서의 함수와 프로그래밍의 함수는 같은 이름을 사용하고, 같은 기능을 하지만 차이점이 존재한다.

    • 수학에서의 함수 : 변수(미지수)의 값에 따라 종속된 결과가 변한다.
    • 코딩에서의 함수 : 변수(미지수)의 값에 따라 종속된 결과가 변한다.

    다만, 코딩에서의 함수변수(인수)가 없거나 결과값이 없는 경우도 존재한다.

     

     

    거듭제곱과 제곱근

    이 함수에서 y는 매개변수로 받은 x를 a제곱하여 반환하는 함수이다.

    이는 같은 수를 여러 번 곱한다 하여 거듭제곱이라 한다.

     

     

    반대로 위의 식에서 a가 1/2라면, 양쪽에 2제곱을 하여 좌변은 y의 2제곱이 되고, 우변은 x가 된다.

    이처럼 y를 제곱해서 x가 되는 수를 x의 제곱근이라 한다.

     

    양의 제곱근은 numpy모듈의 sqrt()함수로 구할 수 있다.

     

     

    다항식 함수

    다항식 함수는 가장 기본적인 함수이다.

    예를 들어 다음과 같이 여러 개의 항으로 이루어진 식다항식 이라고 한다.

     

    이런 식을 이용한 함수를 다항식 함수라고 한다.

     

     

     

    삼각함수

    삼각함수를 이용한다면 주기적이며 매끄럽게 변화하는 값을 다룰 수 있다.

     

    출처 : https://news.samsungdisplay.com/24578/

    sin, cos, tan삼각함수라고 한다.

    빗변과 밑변 사이 각의 단위는 라디안을 주로 사용한다.

    \pi

     

     

     

    총합과 총곱

    총합은 numpy의 sum()함수를 이용하여 구할 수 있다.

     

    총곱은 numpy의 prod()함수를 이용하여 구할 수 있다.

     

    sum()함수와 prod()함수는 numpy의 배열을 인수로 받는다.

     

     

     

    난수

    난수규칙성이 없는 예측할 수 없는 수치이다.

    인공지능에서는 파라미터의 초기화 등에 난수가 활용된다.

     

    예를 들어 주사위를 던졌을 때, 1부터 6의 어떤 수치가 나올지 알 수 없다.

    난수란 이처럼 미확정인 수치를 말한다.

     

    numpy의 random.randint() 함수에 정수 a를 인수로서 건네면 0부터 a-1까지의 정수를 난수로 반환한다.

     

     

    random.rand() 함수를 사용하여 0부터 1까지 사이의 소수를 랜덤으로 표시할 수 있다.

    rand()함수는 0에서 1 사이의 소수를 균등한 확률로 반환한다.

    이 함수에 정수 a를 인수로 건네면 a개의 난수가 균일한 확률로 반환된다.

     

     

    random.randn() 함수는 정규분포라는 분포를 따르는 확률로 난수를 반환한다.

    정규분포에서는 중앙에서 확률이 높고, 양끝에서 확률이 낮아진다.

     

     

     

    LaTex(레이텍)

    레이텍이라는 문서 시스템을 사용한다면 마크다운 모드에서 수식을 깨끗하게 입력할 수 있다.

     

     

    이러한 기호들은 다음과 같이 표현된다. 첨자가 여러 개 있는 경우는 {}(중괄호)로 감싼다.

     

     

    첨자나 거듭제곱을 이용해서 다항식을 만들 수 있다.

     

     

    \sqrt를 이용하여 제곱근을 나타낼 수 있다.

     

    \sin을 이용하여 삼각함수를 나타낸다.

     

     

    \frac {}{}는 분수를 나타낼 수 있다.

     

     

     

    절댓값

    절댓값값과 0사이의 거리를 나타낸다.

    인공지능에서 0을 중심으로 한 값의 퍼짐 상태를 파악하기 위해 사용하는 경우가 있다.

     

    절댓값은 값의 양, 음을 무시하고 얻을 수 있는 음이 아닌 값을 말한다.

    음수의 절댓값은 그 값에서 음의 부호를 뺀 것이다.

    양수의 절댓값은 값 그대로이다.

     

     

    절댓값은 numpy의 abs()함수를 사용해 구할 수 있다.

     

     

     

    선형대수

    스칼라, 벡터, 행렬, 텐서

    스칼라(scalar)는 1, 5, 1.2, -7 등의 보통의 수치를 말한다.

    이 수식은 1.2 * 10의 5제곱을 나타낸다.

     

     

    벡터스칼라를 직선 상에 나열한 것이다.

     

     

    행렬스칼라를 격자 형태로 나열한 것이다.

     

     

    행렬에서 수평 방향 스칼라의 나열을 행, 수직 방향 스칼라의 나열을 열이라고 한다.

    행이 m개, 열이 n개인 행렬을 m x n 행렬로 표현한다.

     

    각각의 요소를 나타낼 때 스칼라는 첨자가 없고, 벡터는 1개, 행렬은 2개가 붙는다.

     

    텐서스칼라를 여러 개의 차원으로 나열한 것으로, 스칼라, 벡터, 행렬을 포함한다.

    각 요소에 붙은 첨자의 수를 그 텐서의 차원수라고 말한다.

     

    스칼라에는 첨자가 없으므로 0차원 텐서, 벡터는 1개이므로 1차원, 행렬은 2개이므로 2차원 텐서이다.

    더욱 고차원인 것은 3차원 텐서, 4차원 텐서가 된다.

     

     

     

    벡터의 내적과 놈

    내적벡터끼리의 곱의 한 종류인데, 두 가지 벡터의 각 요소끼리 곱한 값을 총합하여 정의한다.

     

    내적을 구할 때는 두 개의 벡터의 요소 수가 같아야 한다.

     

    내적은 numpy의 dot()함수로 간단하게 구할 수 있다.

    또한 sum()함수를 사용해서 각 요소의 곱의 총합으로도 구할 수 있다.

     

     

    벡터의 크기를 나타내는 양이다.

    놈은 numpy의 linalg.norm() 함수를 이용해서 구할 수 있다.

     

    놈의 종류에 따라 벡터의 크기는 다른 값이 된다.

    놈은 인공지능에서 정칙화에 쓰인다.

     

    정칙화필요 이상으로 네트워크 학습이 진행되는 것을 파라미터를 조절해서 예방하는 것이다.

     

     

    행렬의 곱

    벡터끼리의 내적을 행렬로 확장하면 행렬의 곱이 된다.

    행렬의 곱은 인공지능에서 효율적인 계산을 시행하기 위해서 중요한 조작이다.

     

    행렬곱에서는 앞 행렬에서 행의 각 요소와 뒤 행렬에서 열의 각 요소를 곱해서 총합을 구하고, 새로운 행렬의 요소로 한다.

     

    행렬곱을 계산하기 위해서는 앞 행렬의 열수와 뒤 행렬의 행수가 일치해야 한다.

    예를 들어 앞 행렬의 열수가 3이면 뒤 행렬의 행수는 3이여야 한다.

     

    행렬곱을 전체 행과 열의 조합으로 계산하는 것은 힘들지만,

    numpy의 dot() 함수를 이용하면 간단하게 계산할 수 있다.

     

     

    행렬의 요소의 곱은 아다마르 곱이라고도 불리며, 행렬의 각 요소를 곱한다.

    요소별 곱을 계산하기 위해서는 배열의 형태가 같아야 한다.

     

    또한, 요소별 합에는 +, 요소별 차에는 -, 요소별 나눗셈에는 /를 사용한다.

     

     

    전치

    전치에 의해 행렬의 행과 열을 바꿀 수 있다.

    인공지능의 코드에서는 전치를 자주 사용한다.

     

    numpy에서는 행렬을 나타내는 배열명의 뒤에 .T를 붙이면 전치된다.

     

    행렬곱에 대해서는 기본적으로 앞 행렬의 열수와 뒤 행렬의 행수가 일치해야 한다.

    그렇지만 일치하지 않아도 전치에 의해 행렬곱을 할 수 있는 경우가 있다.

     

    동일한 행렬을 가진 A와 B가 있다면 B를 전치하여 A의 열수와 B의 행수를 일치시킨다면

    행렬곱을 계산할 수 있게 된다.

     

     

    행렬식과 역행렬

    행렬식을 사용함으로써 행렬의 역행렬을 구할 수 있다.

    역행렬을 사용하면 행렬의 방정식을 풀 수 있다.

     

    단위행렬에서는 행과 열의 수가 같고, 왼쪽 위에서부터 오른쪽 아래로 1이 나열, 그 외의 요소는 0이 된다.

     

    단위 행렬은 다른 행렬의 앞이나 뒤에서 행렬곱을 하더라도 그 행렬의 값을 변화시키지 않는 특징이 있다.

    단위 행렬이 3 x 3이든 4 x 4이든 앞 뒤 어느 쪽부터 곱하든 행렬을 변화시키지 않는 성질을 갖는다.

    단위 행렬에는 같은 크기의 행렬에 곱해도 곱하는 대상의 행렬을 변화시키지 않는 성질이 있다.

     

    numpy에서는 eye() 함수로 단위행렬을 작성할 수 있다.

    eye()함수에 전달하는 인수는 단위행렬의 크기를 나타낸다.

     

     

    어떤 수치와 그의 역수를 곱한다면 1이 된다.

    스칼라와 마찬가지로 행렬에도 곱하면 단위행렬이 되는 행렬이 존재한다.

    이러한 행렬을 역행렬이라 한다.

     

     

    행렬에 따라서는 역행렬이 존재하지 않을 수 있다.

    역행렬이 존재할지 여부행렬식에 의해 판정할 수 있다.

     

    numpy의 linalg.det() 함수에 의해 행렬식을 구할 수 있다.

    역행렬이 존재하는 경우 linalg.inv() 함수로 역행렬을 구할 수 있다.

     

    역행렬은 인공지능에서 변수끼리 상관관계를 알아보는 회귀 분석에 사용된다.

     

     

    선형변환

    인공지능에서는 뉴럴 네트워크로 정보를 전파시키는데 선형변환을 사용하여 벡터를 변환한다.

     

    화살표를 그리려면 matplotlib.pyplot의 quiver() 함수를 사용한다.

    quiver(시작점의 x좌표, 끝점의 y좌표, 화살표의 x성분, 화살표의 y성분,
               angles=화살표 각도의 결정 방법, scale_units=스케일의 단위,
               scale=스케일, color=화살표의 색)

     

    화살표의 x성분과 y성분으로 벡터를 표현한다.

     

    실행해보면 다음과 같은 화살표가 만들어 진다.

    원점을 시작점으로 하는 화살표로 벡터를 그릴 수 있다.

     

     

     

     

    벡터에서 벡터로의 변환선형변환이라고 한다.

    다음은 벡터의 선형변환을 실시하기 위해 수정한 코드이다.

     

     

    행렬 A에 의해 검정색 화살표로 표시되는 벡터a가 파란색 화살표로 표시되는 벡터b로 변환됬다.

     

     

    고윳값과 고유벡터

     

    고윳값, 고유벡터는 행렬을 다룰 때 자주 등장하는 중요한 개념이다.

    인공지능에서는 데이터를 요약하는 주성분 분석이라는 기법에 이용된다.

     

    고윳값은 행렬에 곱했을 때 A행렬과 같아지는 값이다.

     

    고유벡터는 선형변환에 의해 각 요소가 고윳값 배가 되는 벡터이다.

    고유벡터는 행렬에 곱했을 때 람다행렬과 같아지는 값이다.

     

    고유방정식은 어떤 람다(스칼라)가 있을 때, 행렬식이 0이 되는 것이다.

     

    numpy의 linalg.eig() 함수에 의해 고윳값과 고유벡터를 동시에 구할 수 있다.

    이 함수의 결과는 두 개의 배열처음 배열이 고윳값을 포함, 다음 배열이 고유벡터를 포함한다.

     

     

     

    코사인 유사도

    코사인 유사도벡터끼리의 방향의 가까운 정도를 나타낸다.

    인공지능에서 코사인 유사도는 2개 벡터의 방향이 얼마나 일치하고 있는지를 나타내는 지표로 사용한다.

    한국어나 영어 등의 자연 언어를 다루는 경우, 단어를 자주 벡터로 나타낸다.

     

    코사인 유사도는 이처럼 단어 사이 관계성을 나타내는데 이용한다.

     

    코사인 유사도는 내적과 놈을 사용해서 계산한다.

    내적의 계산에는 numpy의 dot()함수, 놈의 계산에는 linalg.norm() 함수를 사용한다.

     

    벡터가 같은 방향인 경우, 코사인 유사도는 최대값이 1이 되고,

    벡터가 반대 방향인 경우 코사인 유사도는 최솟값 -1이 된다.

     

Designed by Tistory.