ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 패스트캠퍼스 환급챌린지 13일차 미션 (2월 13일) : 딥러닝·인공지능 Signature 초격차 패키지 Online. 강의 후기
    패스트캠퍼스 챌린지 2024. 2. 13. 11:34

     

    연휴 끝.

    오늘은 진짜 진짜 진짜 중요한 미분하는 날

     

    Part1. 딥러닝을 시작하기전에

    CH04-05. 파이토치 자동 미분과 기울기

    &

    CH04-05. 파이토치 단순 뉴런부터 깊은 모델 만들기

     

     

     

    CH04-05. 파이토치 자동 미분과 기울기

    일단, 강의가 4분 32초라 이 이해하기 어려운 미분과 기울기를 어떻게 설명하실까 했는데....ㅎㅎ

     

    미분이 왜 필요한지, 미분이라는 말이 왜 나왔는지, 이게 모델에서 어떤 역할을 하는지 모호하거나 말씀이 없으시고 지나가

    내가 보충설명을 좀 해야겠다.(이렇게 적으면서도 나도 정리가 되니깐.)

     

     

    미분을 하는 이유?

    "기울기가 0에 가까운 것을 찾아내기 위해?" 

    이게 무슨 말이냐. 우리가 지금 하려는 파이토치 인공지능을 만드는 과정이다.

    이런 인공지능 모델을 만들기 위해서는 학습도 시켜야 하고, 검증도 해봐야하고, 실제로 나중에 테스트도 해야된다.

     

    그래서 이 학습을 시키는 과정에서 많은 데이터들이 입력이 되면 얘가 내부적으로 

    "아 이자료는 더 중요하니깐 10점의 가중치!, 아 이자료는 덜 중요하니까 2점의 가중치!" 이런식으로 연속적인 계산을 수행한다. 이 과정에서 가중치를 w라고 하는데,

     

    이 인공지능이라는 것이 한번에 정답을 맞출 수 없으므로 무수한 trial을 통해? 오류를 개선해 나간다.

     

    이 오류를 개선해 나가는 방법은

    여러가지 뉴런들이 1단계 2단계 3단계 이렇게 데이터들이 계산을 하면서 쭉죽 밑으로 타고 내려가는데,(레이어들이

    여러개 있다고 생각하자)

     

    1에서 2, 2에서 3 이렇게 점차 아웃풋으로 나가는 방향을 순전파라고 한다. 그리고,

    이 오류를 찾아가기 위해선 입력된 데이터부터 output까지 과정 중 가중치에 대한 수정, b(편향)에 대한 수정값이 필요하다면 다시 뒤로 역류하는데 이를 역전파라고 한다.

     

    이 역전파는 파이토치로 쉽게 가능한데, 무튼 다 떠나서 역전파와 이 미분이 아주 관련이 깊다.

     

    미분은 우리가 2차 곡선? 에서 기울기를 알기 위해 썼었는데, 이 기울기가 점점 낮아질 수록 0에 가깝지 않은가?

     

    그 값을 찾는 것이고,(2차곡선은 정답데이터와 실제 데이터의 오차와 관련된 2차곡선으로 생각하면 됨) 이 기울기를 계속 줄여나가는 것이 w를 개선해 나가는 것, 즉 미분을 하면서 기울기가 낮은 것을 찾아가는 과정이라고 보면 된다.

     

    말이 너무 어려운데, 다시 한번 보면서 해보면 쉽게 이해가 된다.

     

    다시 돌아와서 파이토치에서는 연산에 대하여 자동 미분을 수행할 수 있다?

     

    import torch

    # requires_grad를 설정할 때만 기울기 추적 

    x = torch.tensor([3.0, 4.0)], requires_grad = True)             ←requires_grad : 기울기를 계속 추적 모드 On(Default:off)

    y = torch.tensor([1.0, 2.0)], requires_grad = True)            ←requires_grad : 기울기를 계속 추적 모드 On(Default:off)

    z = x+y

     

    print(z) #[4.0, 6,0]

    print(z.grad_fn) # 더하기(add)

     

    out = z.mean()

    print(out) # 5.0

    print(out.grad_fn)#평균

     

    out.bacward() # scalar 값에 대하여만 가능

     

    print(x.grad)

    print(y.grad)

    print(z.grad)

     

    이에 대한 실행 결과는 아래와 같다.

     

    print(z) #[4.0, 6,0]  ← 이 결과값에 대한 답은 tensor([4. , 6.] 이고,

    print(z.grad_fn)      ← z.grad_fn은 어떤 연산으로 z가 생성되었는지를 묻는 말인거고,

                                         grad_fn=<AddBackward0>) 이 z는 Add를 통해 만들어졌으며,

                                         Addbackward를 통해 역전파를 할 수 있음을 말한다.

     

    각각의 변수의 값이 어떻게 바뀌었을 때 최종 결과가 어떻게 바뀌는지에 대해 영향도를 우리는 기울기를 통해 확인할 수

    있다.( 각 w가 결과값에 주는 영향도를 확인하기 위한 용도)

     

     

     

    학습을 위해서는 기울기를 추적하지만, 학습된 모델은 기울기를추적하지 않는다?

    requires_grad가 비용을많이 잡아먹는다고 한다.

    굳이 모든 것에 대해 grad값이 필요하지 않기 때문에 학습된 모델에도 필요가 없다.

    ('학습' 이라함은 위에 말한 것처럼 파라미터를 계속 업데이터 하면서 w,b를 맞춰나가는 작업인데,

      테스트 과정에서는 이 것이 필요하지 않기 때문이다.)

     

     

     

    CH04-06. 단순뉴런부터 깊은 모델 만들기

    벌써 깊은 뉴런을 만든다고 하시니 따라해보자.

     

    일단...하하하하하 우선 데이터세트가 있다고 가정하고 따라가보겠다.

     

     

     

    라이브러리들을 받자

    자, 이미지를 살펴보면 한두개를 가져올게 아니다. 왕창 가져와야 한다.

     

    무튼 trochvision의 트랜스폼즈, 모델즈, 데이터셋s 이런 아이들은 텐서 데이터를 가공하고 합치고 배치로 만들어 주고 등등

    자료를 가공하기 위해 불러오는 것들이고,

     

    optim은 역전파를 연결해주거나 스텝마다 수행할 때, 그리고 nn은 nn.Sequential 즉, 모델을 생성할 때 쓴다.

    utils.data의 randomsplit의 경우에는 기존의 트레인 셋을 또 다시 트레인 셋과 벨리데이션 셋( 그니까 기존의 세트는

    훈련용과 실험용으로 나뉘는데, 검증을 위해 이 훈련용을 한번더 훈련용과 검증용으로 나눈다는 말임)으로 나누는데,

     

    이 하나의 데이터를 랜덤한 비율로 나누기 위해서 randomsplit이 필요하다.

     

     

    데이터 증진(data augmentation) 을 명시화하여 초기화할 수 있다?

     

    갑자기 데이터 증진을 말씀하셔서 놀랐지만...이 데이터 증진을 왜하는지에 대해서도 설명을 잠깐 하자면...

    난중에 배우다 보면 오버피팅이라는 현상을 마주하게 될 것이다. 이는 내가 학습을 완료시킨다음에, 자! 이제 테스트를 

    해보자 했을 때, 이 인공지능 성능이 뚝뚝 떨어지는 것을 의미한다.

    (즉, 훈련했던 것은 아주 잘 맞추는데, 새로운 것을 딱 내밀면 잘 모른다는것이다...나의 고등학생 시절의 기계학습과

    유사하다.)

    이러한 현상을 방지하기 위해 이미지 양을 늘리거나 의도적으로 이미지를 변조시키는데 이것이 데이터 증진이라고 하며

     

    RNN에서 이미지를 반전하거나, 색을 바꾸거나, 비틀거나 잘라내거나 등등 오만 방법을 다 쓴다.

     

    그이후에, DataLoader를 이용하여 데이터를 모델에 넣을 수 있게 예쁘게 포장하는 과정을 거치는데,

    여기서 배치(덩어리, 인공지능은 한장한장 공부하는게 아니라 한 뭉터기씩 공부한다.) 크기, 셔플 등을 우리가 지정할  수 있다.

     

     

     

     

     

     

     

     

    13일차 끝.

     

     

    본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

    https://bit.ly/48sS29N

Designed by Tistory.