Return to Video

PyTorch Lecture 09: Softmax Classifier

  • 0:00 - 0:02
    이번 강의에서는 신경망에서 널리 쓰이는
    Softmax Classifier에 대해 이야기해보겠습니다
  • 0:02 - 0:05
    이번 강의에서는 신경망에서 널리 쓰이는
    Softmax Classifier에 대해 이야기해보겠습니다
  • 0:05 - 0:08
    이번 강의에서는 신경망에서 널리 쓰이는
    Softmax Classifier에 대해 이야기해보겠습니다
  • 0:08 - 0:11
    한 자리 숫자 손글씨 이미지가 있다고 가정해 봅시다
  • 0:11 - 0:14
    한 자리 숫자 손글씨 이미지가 있다고 가정해 봅시다
  • 0:14 - 0:17
    각 이미지를 0에서 9사이의
    숫자로 구별해보려고 합니다
  • 0:17 - 0:20
    각 이미지를 0에서 9사이의
    숫자로 구별해보려고 합니다
  • 0:20 - 0:22
    총 10개의 카테고리가 되는거죠
  • 0:22 - 0:27
    이 경우는 분류 문제이므로
  • 0:27 - 0:30
    로지스틱 회귀모델을 사용할 수 있을 것입니다
  • 0:30 - 0:33
    이 로지스틱 회귀모델은 입력을 받고
    선형 모델과 활성값을 이용하여
  • 0:33 - 0:35
    이 로지스틱 회귀모델은 입력을 받고
    선형 모델과 활성값을 이용하여
  • 0:35 - 0:39
    0 인지 1인지 예측하는데 사용할 수 있는
    하나의 출력을 이끌어냅니다
  • 0:39 - 0:42
    0 인지 1인지 예측하는데 사용할 수 있는
    하나의 출력을 이끌어냅니다
  • 0:42 - 0:46
    하지만 우리의 문제에서는
    10개의 레이블이 필요합니다
  • 0:46 - 0:49
    그러므로 이렇게 10개의 출력이
    더 자연스럽습니다
  • 0:49 - 0:52
    그러므로 이렇게 10개의 출력이
    더 자연스럽습니다
  • 0:52 - 0:55
    각 출력은 Y가 0또는 1이 될
    확률을 의미합니다
  • 0:55 - 1:00
    각 출력은 Y가 0또는 1이 될
    확률을 의미합니다
  • 1:00 - 1:02
    어떻게 이것을 구현할까요?
  • 1:02 - 1:06
    하나의 출력이 아닌 10개의 출력을 위해서
    어떻게 신경망을 구현할까요?
  • 1:06 - 1:08
    하나의 출력이 아닌 10개의 출력을 위해서
    어떻게 신경망을 구현할까요?
  • 1:08 - 1:12
    우리는 출력값 행렬을 만들기 위해
    행렬곱셈을 이용할 것입니다
  • 1:12 - 1:14
    우리는 출력값 행렬을 만들기 위해
    행렬곱셈을 이용할 것입니다
  • 1:14 - 1:19
    앞에서 우리는 N x 2 행렬을 N x 1 행렬로 만들기 위해
    2 x 1 행렬을 사용했습니다
  • 1:19 - 1:24
    앞에서 우리는 N x 2 행렬을 N x 1 행렬로 만들기 위해
    2 x 1 행렬을 사용했습니다
  • 1:24 - 1:26
    간단한 방법으로
  • 1:26 - 1:29
    이 2는 같으므로 상쇄시키고
  • 1:29 - 1:31
    이 2는 같으므로 상쇄시키고
  • 1:31 - 1:38
    결국 이 행렬곱의 출력값은 N x 1 행렬이 됩니다
  • 1:38 - 1:39
    여기서 문제는
    10개의 출력을 만들고 싶을 때
  • 1:39 - 1:43
    여기서 문제는
    10개의 출력을 만들고 싶을 때
  • 1:43 - 1:50
    가중치 행렬의 사이즈를
    어떻게 설정해야 하는가 하는 것입니다
  • 1:50 - 1:50
    이 경우 입력값 x는 2개이고
  • 1:50 - 1:54
    이 경우 입력값 x는 2개이고
  • 1:54 - 1:58
    N x 10 행렬을 만들고 싶다고 칩시다
  • 1:58 - 2:01
    W의 행렬 사이즈는 무엇일까요?
  • 2:01 - 2:05
    여기 2는 이 2와 같아야 합니다
  • 2:05 - 2:07
    따라서 2에
  • 2:07 - 2:08
    우리는 10을 만들고 싶으니까
  • 2:08 - 2:12
    이러면 출력이 10개가 되겠죠
  • 2:12 - 2:15
    간단히 말해 우리의 선형 모델에서
    그냥 여기의 가중치값을 이용할 수 있습니다
  • 2:15 - 2:22
    간단히 말해 우리의 선형 모델에서
    그냥 여기의 가중치값을 이용할 수 있습니다
  • 2:22 - 2:26
    입력 크기가 M이라 가정하면
    우리가 필요한 것은 M x 10의 행렬 W입니다
  • 2:26 - 2:31
    입력 크기가 M이라 가정하면
    우리가 필요한 것은 M x 10의 행렬 W입니다
  • 2:31 - 2:35
    그러면 10개의 출력이 나오겠죠
  • 2:35 - 2:39
    이제 다음 문제는
    어떻게 이 출력값들의 확률을 계산하는지입니다
  • 2:39 - 2:44
    이제 다음 문제는
    어떻게 이 출력값들의 확률을 계산하는지입니다
  • 2:44 - 2:46
    이를 위해 우리는 아주 유명한 함수인
    Softmax를 사용할 것입니다
  • 2:46 - 2:47
    이를 위해 우리는 아주 유명한 함수인
    Softmax를 사용할 것입니다
  • 2:47 - 2:51
    이것이 바로 Softmax 등식입니다
  • 2:51 - 2:56
    Softmax의 원리는 주어진 Z 숫자들을
    0에서 1 사이의 값들로 만드는 것입니다
  • 2:56 - 3:00
    Softmax의 원리는 주어진 Z 숫자들을
    0에서 1 사이의 값들로 만드는 것입니다
  • 3:00 - 3:04
    Softmax의 출력값은 인덱스 j의 확률이 됩니다
  • 3:04 - 3:08
    Softmax의 출력값은 인덱스 j의 확률이 됩니다
  • 3:08 - 3:09
    어떻게 동작하는지 이해를 돕기 위해
    한가지 예를 들어볼 텐데요
  • 3:09 - 3:13
    어떻게 동작하는지 이해를 돕기 위해
    한가지 예를 들어볼 텐데요
  • 3:13 - 3:17
    입력 X에 대해 선형연산을 하고
  • 3:17 - 3:17
    Scores 또는 Logits라고 하는
    3개의 숫자를 만들어냅니다
  • 3:17 - 3:20
    Scores 또는 Logits라고 하는
    3개의 숫자를 만들어냅니다
  • 3:20 - 3:24
    선형이기 때문에 어떤 숫자든 될 수 있습니다
  • 3:24 - 3:28
    2.0, 1.0, 0.1등이 될 수 있죠
  • 3:28 - 3:33
    이 숫자들(Logits)에 Softmax를 적용하면
  • 3:33 - 3:34
    각 인덱스에 대해 아주 좋은 확률을 얻을 수 있습니다
  • 3:34 - 3:35
    각 인덱스에 대해 아주 좋은 확률을 얻을 수 있습니다
  • 3:35 - 3:37
    각 인덱스에 대해 아주 좋은 확률을 얻을 수 있습니다
  • 3:37 - 3:44
    예를 들면, 0.7은 Y가 0이 될 확률입니다
  • 3:44 - 3:47
    여기서 각 값들은 확률을 의미하기 때문에
    각 값들을 모두 합하면 1이됩니다
  • 3:47 - 3:51
    여기서 각 값들은 확률을 의미하기 때문에
    각 값들을 모두 합하면 1이됩니다
  • 3:51 - 3:53
    여기서 각 값들은 확률을 의미하기 때문에
    각 값들을 모두 합하면 1이됩니다
  • 3:53 - 3:55
    아래 주소의 코스에 나오는 슬라이드를 이용하여
    Softmax를 다시 한번 요약하자면
  • 3:55 - 4:00
    아래 주소의 코스에 나오는 슬라이드를 이용하여
    Softmax를 다시 한번 요약하자면
  • 4:00 - 4:02
    우리의 입력값에서 선형모델을 적용할 수 있고
  • 4:02 - 4:03
    우리의 입력값에서 선형모델을 적용할 수 있고
  • 4:03 - 4:09
    선형모델은 어떤 숫자값 Logit을 만들어냅니다
  • 4:09 - 4:11
    그리고 여기 Softmax를 적용하면
  • 4:11 - 4:12
    그리고 여기 Softmax를 적용하면
  • 4:12 - 4:17
    확률값들을 얻어낼 수 있습니다
  • 4:17 - 4:18
    다음 단계는 주어진 레이블에 대한 손실을 계산하는 것입니다
  • 4:18 - 4:23
    다음 단계는 주어진 레이블에 대한 손실을 계산하는 것입니다
  • 4:23 - 4:26
    이 경우에는 레이블은 원-핫 레이블을 말합니다
  • 4:26 - 4:27
    이 경우에는 레이블은 원-핫 레이블을 말합니다
  • 4:27 - 4:36
    만약 Y가 0이면 레이블은 1, 0, 0이 된다는 뜻입니다
  • 4:36 - 4:38
    이것이 바로 원-핫 포맷입니다
  • 4:38 - 4:41
    손실값을 계산하기 위해서
  • 4:41 - 4:43
    우리가 계산한 y햇과 실제 y에
    크로스 엔트로피를 사용합니다
  • 4:43 - 4:51
    우리가 계산한 y햇과 실제 y에
    크로스 엔트로피를 사용합니다
  • 4:51 - 4:52
    크로스 엔트로피는 이 등식으로 계산할 수 있습니다
  • 4:52 - 4:55
    크로스 엔트로피는 이 등식으로 계산할 수 있습니다
  • 4:55 - 4:57
    -Y에 Y햇의 로그값을 곱한 것이죠
  • 4:57 - 5:02
    크로스 엔트로피는 기본적으로
    Y와 Y햇의 분포 차이를 계산합니다
  • 5:02 - 5:06
    크로스 엔트로피는 기본적으로
    Y와 Y햇의 분포 차이를 계산합니다
  • 5:06 - 5:09
    전체 손실은 전체 크로스 엔트로피의 합이 됩니다
  • 5:09 - 5:12
    전체 손실은 전체 크로스 엔트로피의 합이 됩니다
  • 5:12 - 5:13
    간단한 예제 소스코드를 이용해서
    어떻게 크로스 엔트로피를 구하는지 알아봅시다
  • 5:13 - 5:16
    간단한 예제 소스코드를 이용해서
    어떻게 크로스 엔트로피를 구하는지 알아봅시다
  • 5:16 - 5:18
    간단한 예제 소스코드를 이용해서
    어떻게 크로스 엔트로피를 구하는지 알아봅시다
  • 5:18 - 5:22
    이 예제에서는 간단한 numpy 배열을 이용할 겁니다
  • 5:22 - 5:28
    이 예제에서 우리는 레이블 Y을 표현하기 위해
    원-핫 표현방식을 사용합니다
  • 5:28 - 5:30
    여기서는 1, 0, 0이 Y가 됩니다
  • 5:30 - 5:33
    여기서는 1, 0, 0이 Y가 됩니다
  • 5:33 - 5:36
    예측 1에는 우리가 예제에서 사용했던 값인
    0.7, 0.2, 0.1을 할당합니다
  • 5:36 - 5:41
    예측 1에는 우리가 예제에서 사용했던 값인
    0.7, 0.2, 0.1을 할당합니다
  • 5:41 - 5:43
    여기서는 우리의 예측이 아주 좋은데요
  • 5:43 - 5:47
    Y가 0이 될 확률이 매우 높기 때문입니다
  • 5:47 - 5:51
    Y가 0이 될 확률이 매우 높기 때문입니다
  • 5:51 - 5:54
    다른 예측과 비교해보기 위해서
    0.6의 값을 가진 틀린 예측을 준비해봤습니다
  • 5:54 - 5:59
    다른 예측과 비교해보기 위해서
    0.6의 값을 가진 틀린 예측을 준비해봤습니다
  • 5:59 - 6:02
    Y는 2가 될텐데요
  • 6:02 - 6:05
    Y가 2가 될 확률은 매우 높겠지만
  • 6:05 - 6:06
    이 값(0.1)은 매우 낮죠
  • 6:06 - 6:09
    그러므로 이 예측은 틀렸습니다
  • 6:09 - 6:11
    손실을 계산해보면
    여기 값은 작고 여기 값은 큽니다
  • 6:11 - 6:14
    손실을 계산해보면
    여기 값은 작고 여기 값은 큽니다
  • 6:14 - 6:17
    손실을 계산해보면
    여기 값은 작고 여기 값은 큽니다
  • 6:17 - 6:19
    이게 바로 우리가 예상했던 바입니다
  • 6:19 - 6:22
    여기 크로스 엔트로피를 적용하면
  • 6:22 - 6:25
    -YLog(Y_pred)이 됩니다
  • 6:25 - 6:28
    -YLog(Y_pred)이 됩니다
  • 6:28 - 6:32
    여기서는 작은 값이 나오겠죠
  • 6:32 - 6:34
    두 번째 예측에 대해
    크로스 엔트로피 손실을 계산해보면
  • 6:34 - 6:36
    두 번째 예측에 대해
    크로스 엔트로피 손실을 계산해보면
  • 6:36 - 6:39
    큰 값이 나옵니다
  • 6:39 - 6:41
    어떤 원리일까요?
  • 6:41 - 6:43
    이건 아주 직관적이라고 할 수 있는데요
  • 6:43 - 6:46
    왜냐면 우리는 원-핫값 Y를 준비했고
  • 6:46 - 6:49
    이것을 곱하고 나면 우리는
    여기 2개의 값만 신경 쓰면 됩니다
  • 6:49 - 6:52
    이것을 곱하고 나면 우리는
    여기 2개의 값만 신경 쓰면 됩니다
  • 6:52 - 6:54
    나머지는 무시하면 됩니다
    왜냐면 원-핫을 곱했으니까요
  • 6:54 - 6:57
    나머지는 무시하면 됩니다
    왜냐면 원-핫을 곱했으니까요
  • 6:57 - 7:05
    그래서 -1에 log(0.7)을 곱하면
  • 7:05 - 7:07
    아주 작은 값이 나오는거죠
  • 7:07 - 7:11
    log(0.1)은 큰 값이 나옵니다
  • 7:11 - 7:16
    이것이 우리가
    크로스 엔트로피 값을 계산하는 방법입니다
  • 7:16 - 7:18
    PyTorch에서 손실값을 구하려면
    CrossEntropyLoss를 사용하면 됩니다
  • 7:18 - 7:19
    PyTorch에서 손실값을 구하려면
    CrossEntropyLoss를 사용하면 됩니다
  • 7:19 - 7:22
    PyTorch에서 손실값을 구하려면
    CrossEntropyLoss를 사용하면 됩니다
  • 7:22 - 7:25
    우리는 예측값과 실제값을 이용하여
    이 함수를 호출해서 손실값을 계산할 수 있습니다
  • 7:25 - 7:28
    우리는 예측값과 실제값을 이용하여
    이 함수를 호출해서 손실값을 계산할 수 있습니다
  • 7:28 - 7:32
    우리는 예측값과 실제값을 이용하여
    이 함수를 호출해서 손실값을 계산할 수 있습니다
  • 7:32 - 7:36
    PyTorch에서 이 CrossEntropyLoss() 함수를 사용할 때
  • 7:36 - 7:38
    두 가지를 주의해야합니다
  • 7:38 - 7:42
    첫 번째, 이 Y는 원-핫이 아닙니다
  • 7:42 - 7:45
    클래스입니다
  • 7:45 - 7:51
    여기서는 0, 1, 또는 2의 값이 될 수 있습니다
  • 7:51 - 7:54
    더 편리한 방법이죠
  • 7:54 - 7:56
    두 번째로, 이전 예제와 다른 점은
    이 예측값은 Softmax가 아니라는 것입니다
  • 7:56 - 8:01
    두 번째로, 이전 예제와 다른 점은
    이 예측값은 Softmax가 아니라는 것입니다
  • 8:01 - 8:06
    그냥 바로 logits 값들을 여기 집어넣을 수 있습니다
  • 8:06 - 8:09
    그 이유는 이 구현체 CrossEntropyLoss 안에
  • 8:09 - 8:13
    이미 Softmax가 포함되어 있기 때문입니다
  • 8:13 - 8:16
    그러므로 손실값을 계산하기 위해
  • 8:16 - 8:18
    Softmax를 적용할 필요가 없습니다
  • 8:18 - 8:21
    이것도 아주 편리하죠
  • 8:21 - 8:22
    기본적으로 크로스 엔트로피는
  • 8:22 - 8:25
    아주 사용하기에 편리합니다
  • 8:25 - 8:29
    그냥 클래스를 넘기거나
  • 8:29 - 8:33
    또는 logits를 넘기면 됩니다
  • 8:33 - 8:35
    이 예제에서 말하고자 하는 것은
  • 8:35 - 8:43
    0 클래스와 logits 값이 있을 때
  • 8:43 - 8:45
    Y값과 Y_pred값을 사용하면
  • 8:45 - 8:47
    손실값을 계산할 수 있다는 것입니다
  • 8:47 - 8:48
    예상했던 대로
  • 8:48 - 8:54
    첫 번째는 손실값이 아주 작으므로 옳은 예측이고
  • 8:54 - 8:57
    두 번째는 손실값이 크므로 틀린 예측입니다
  • 8:57 - 8:59
    두 번째는 손실값이 크므로 틀린 예측입니다
  • 8:59 - 9:03
    두 번째는 손실값이 크므로 틀린 예측입니다
  • 9:03 - 9:05
    PyTorch의 또 다른 장점으로는
  • 9:05 - 9:06
    PyTorch의 또 다른 장점으로는
  • 9:06 - 9:09
    배치모드(batch mode)를 사용할 수 있다는 것입니다
  • 9:09 - 9:14
    다수의 레이블과 예측을 준비합니다
  • 9:14 - 9:15
    다수의 레이블과 예측을 준비합니다
  • 9:15 - 9:21
    이 예제에서는 첫 번째 레이블 값이 2, 0, 1입니다
  • 9:21 - 9:26
    다시 말하자면, Y는 원-핫이 아니라 클래스입니다
  • 9:26 - 9:30
    우리는 이 3개의 다른 예측이 필요합니다
  • 9:30 - 9:32
    첫 번째 예측은 이것인데
  • 9:32 - 9:34
    옳은 예측입니다
  • 9:34 - 9:36
    이것이 두 번째 예측인데
  • 9:36 - 9:37
    이것도 옳은 예측입니다
  • 9:37 - 9:39
    이것은 세 번째 예측인데
  • 9:39 - 9:41
    이것도 또한 옳은 예측입니다
  • 9:41 - 9:46
    Y_pred1은 좋은 예측입니다
    아주 좋아요
  • 9:46 - 9:49
    Y_pred2는 그리 좋은 예측은 아닙니다
  • 9:49 - 9:52
    이게 그 예측인데요
    틀렸고
  • 9:52 - 9:54
    이것도 틀렸고
  • 9:54 - 9:57
    이것도 틀렸네요
    여러분이 손실을 계산할 때
  • 9:57 - 10:00
    이게 낮은 값이 나오길 기대할 텐데요
  • 10:00 - 10:01
    사실 이 값은 높은 값이 나오게 됩니다
  • 10:01 - 10:02
    사실 이 값은 높은 값이 나오게 됩니다
  • 10:02 - 10:05
    그러므로 여러분이 손실값을 계산할 때
  • 10:05 - 10:07
    우리의 Softmax classifier에서 아주 잘 동작하는
    손실 함수를 이끌어낼 수 있습니다
  • 10:07 - 10:12
    우리의 Softmax classifier에서 아주 잘 동작하는
    손실 함수를 이끌어낼 수 있습니다
  • 10:12 - 10:16
    PyTorch에는 Softmax를 이용하는 다른 방법이 있는데요
  • 10:16 - 10:18
    바로 NLLLoss를 이용하는 방법입니다
  • 10:18 - 10:20
    연습문제로, 여러분은 Softmax classifier를 위해
  • 10:20 - 10:23
    어떻게 NLLLoss를 사용하는지 알아볼 수 있습니다
  • 10:23 - 10:25
    간단한 힌트를 주자면
  • 10:25 - 10:29
    NLLLoss와 함께 LogSoftmax를 사용하면 됩니다
  • 10:29 - 10:31
    마치 우리가 크로스 엔트로피를 사용할 때와
  • 10:31 - 10:34
    마찬가지로 말이죠
  • 10:34 - 10:37
    이제 우리는 Softmax classifier를
  • 10:37 - 10:40
    실제 문제 해결에 사용할 수 있습니다
  • 10:40 - 10:45
    주어진 28 x 28 픽셀의 이미지를
  • 10:45 - 10:49
    0~9 사이의 값으로 구분해 낼 수 있습니다
  • 10:49 - 10:51
    이 이미지는 한자리 숫자 손글씨이기 때문입니다
  • 10:51 - 10:55
    이 이미지는 한자리 숫자 손글씨이기 때문입니다
  • 10:55 - 11:00
    다시 말해, 입력 사이즈가 28 x 28이면
  • 11:00 - 11:04
    총 784 픽셀이 됩니다
  • 11:04 - 11:07
    우리는 신경망을 784 픽셀을 입력값으로 받는
  • 11:07 - 11:09
    신경망으로 디자인할 수 있습니다
  • 11:09 - 11:13
    10개의 출력을 만들 예정이구요
  • 11:13 - 11:17
    첫 번째 입력을 입력 레이어이라 하고
  • 11:17 - 11:20
    출력 부분을 출력 레이어이라 합니다
  • 11:20 - 11:23
    중간부는 안쪽과 바깥쪽으로부터 숨겨져 있기 때문에
  • 11:23 - 11:26
    은닉 레이어이라고 합니다
  • 11:26 - 11:27
    여러분은 만들고 싶은 수만큼의
  • 11:27 - 11:29
    은닉 레이어을 만들 수 있습니다
  • 11:29 - 11:32
    각 은닉 계층이 몇 개의 노드를 가지는지도
  • 11:32 - 11:35
    여러분이 정할 수 있습니다
  • 11:35 - 11:37
    예를 들어
  • 11:37 - 11:40
    4개의 은닉 계층을 만들고
  • 11:40 - 11:48
    각 계층의 노드 수가 520, 320, 240, 120일 때
  • 11:48 - 11:50
    이를 PyTorch를 이용하여 구현하자면
  • 11:50 - 11:54
    우리는 입력 크기와 출력크기에 기반하여
  • 11:54 - 11:59
    각 선형 요소를 만듭니다
  • 11:59 - 12:00
    예를 들어
  • 12:00 - 12:04
    여기 은닉 노드는 520입니다
  • 12:04 - 12:10
    이 첫 번째 선형 요소는 784의 입력을 받고
  • 12:10 - 12:13
    520의 출력을 만들어냅니다
  • 12:13 - 12:18
    두 번째 레이어에서는 520의 입력을 받고
  • 12:18 - 12:22
    320의 출력을 만들어냅니다
  • 12:22 - 12:28
    이런식으로 출력값은 다음 레이어의 입력값이 됩니다
  • 12:28 - 12:30
    마지막으로 우리가 해야 하는 것은
  • 12:30 - 12:32
    10개의 출력을 만드는 것입니다
  • 12:32 - 12:34
    이것은 고정된 값이죠
  • 12:34 - 12:40
    요약하자면, 여기 784와 10의 값은 고정된 값입니다
  • 12:40 - 12:44
    중간부에서는 여러분이 임의로 값을 정할 수 있습니다
  • 12:44 - 12:46
    이렇게 요소들을 만들고 나면
  • 12:46 - 12:49
    forward 함수에서 이것들을 연결해야 합니다
  • 12:49 - 12:55
    입력 X는 벡터 1 x 28 x 28이 됩니다
  • 12:55 - 12:57
    1가지 색깔을 가진 28 x 28 이라는 뜻입니다
  • 12:57 - 12:58
    1가지 색깔을 가진 28 x 28 이라는 뜻입니다
  • 12:58 - 13:01
    우선 이 명령어를 사용하여
    이 벡터를 n, 784로 변환합니다
  • 13:01 - 13:08
    우선 이 명령어를 사용하여
    이 벡터를 n, 784로 변환합니다
  • 13:08 - 13:12
    그리고 이를 첫 번째 레이어로 넘깁니다
  • 13:12 - 13:14
    그리고 다시 이를 두 번째 레이어로 넘기고
  • 13:14 - 13:15
    이를 반복합니다
  • 13:15 - 13:17
    마지막 계층에서는
  • 13:17 - 13:19
    어떤 활성 함수도 적용할 필요가 없습니다
  • 13:19 - 13:21
    우리는 크로스 엔트로피 함수를 위해
  • 13:21 - 13:25
    logits를 사용할 것이기 때문입니다
  • 13:25 - 13:26
    여기서 우리는 criterion으로
  • 13:26 - 13:29
    CrossEntropyLoss를 사용합니다
  • 13:29 - 13:31
    배치에서는
  • 13:31 - 13:35
    X를 뜻하는 data
    그리고 target 값을 얻어냅니다
  • 13:35 - 13:38
    이를 우리의 모델에 넘기면
  • 13:38 - 13:41
    출력, 예측값을 만들어낼 수 있습니다
  • 13:41 - 13:44
    이 예측값과 target을 이용하여
  • 13:44 - 13:46
    loss값을 얻어낼 수 있습니다
  • 13:46 - 13:48
    크로스 엔트로피를 이용하는거죠
  • 13:48 - 13:50
    그리고 역전파를 적용하고
  • 13:50 - 13:55
    가중치를 업데이트하면 끝입니다
  • 13:55 - 13:58
    이것은 전체 소스코드인데요
    첫 번째 부분에서
  • 13:58 - 14:00
    우리는 DataLoader를 사용하고 있습니다
  • 14:00 - 14:04
    디렉토리를 정의하고, 데이터를 불러옵니다
  • 14:04 - 14:08
    이 부분은 우리의 네트워크 부분인데요
  • 14:08 - 14:11
    이렇게 컴포넌트들이 있고
    이를 다함께 연결하고 있습니다
  • 14:11 - 14:12
    끝으로, 아까 말했듯이
  • 14:12 - 14:16
    우리는 어떤 활성화 함수도 사용하지 않습니다
  • 14:16 - 14:19
    이 클래스를 사용하여 우리의 모델을 정의하고
  • 14:19 - 14:22
    크로스 엔트로피를 이용하여 criterion을 정의합니다
  • 14:22 - 14:24
    그리고 옵티마이저를 위해 SGD를 사용합니다
  • 14:24 - 14:28
    그리고 옵티마이저를 위해 SGD를 사용합니다
  • 14:28 - 14:31
    트레이닝 싸이클에서
  • 14:31 - 14:34
    우리는 train_loader를 사용하여
  • 14:34 - 14:38
    각 배치사이즈에 대해 data, target를 받아옵니다
  • 14:38 - 14:43
    여기서 배치 사이즈는 64로 주어져 있네요
  • 14:43 - 14:46
    이 data를 model로 전달하고
  • 14:46 - 14:51
    output과 target을 이용하여 loss를 계산하고
  • 14:51 - 14:55
    output과 target을 이용하여 loss를 계산하고
  • 14:55 - 14:56
    이것들을 실행합니다
  • 14:56 - 14:57
    여기서는
  • 14:57 - 15:02
    epoch 값과 현재 loss 등을 출력합니다
  • 15:02 - 15:06
    현재 과정을 이해할 수 있는 아주 중요한 정보죠
  • 15:06 - 15:07
    우리의 트레이닝(모델)이 잘 된 것인지
    어떻게 알 수 있을까요
  • 15:07 - 15:11
    우리의 트레이닝(모델)이 잘 된 것인지
    어떻게 알 수 있을까요
  • 15:11 - 15:14
    우리는 정확도를 측정해야 합니다
  • 15:14 - 15:16
    정확도를 측정하는 최고의 방법은
  • 15:16 - 15:18
    데이터셋을 두 개로 나누는 것입니다
  • 15:18 - 15:20
    하나는 트레이닝이라고 부르고
  • 15:20 - 15:23
    다른 하나는 테스팅이라 하겠습니다
  • 15:23 - 15:26
    우리의 모델을 만들기 위해서
  • 15:26 - 15:30
    트레이닝 데이터셋만 사용합니다
  • 15:30 - 15:33
    이 모델을 평가하기 위해서는
  • 15:33 - 15:41
    이 모델을 만들 때 전혀 사용되지 않은
    테스트셋을 사용합니다
  • 15:41 - 15:44
    DataLoader를 잘 보면
  • 15:44 - 15:47
    두 개의 다른 DataLoader가 있다는 것을
    알 수 있습니다
  • 15:47 - 15:48
    하나는 train_loader이고
  • 15:48 - 15:52
    다른 하나는 test_loader입니다
  • 15:52 - 15:54
    우리는 트레이닝 싸이클에서
  • 15:54 - 16:02
    우리 모델을 트레이닝 하기 위해
    train_loader만 사용합니다
  • 16:02 - 16:05
    트레이닝이 끝나면
  • 16:05 - 16:12
    우리 모델을 테스트 하기 위해
    이 test_loader를 사용합니다
  • 16:12 - 16:15
    이렇게 model에 값을 넘기고 나면
  • 16:15 - 16:18
    우리는 test_loss값을 계산할 수 있습니다
  • 16:18 - 16:21
    여기서 torch.max 함수를
    이용하여 예측해보면
  • 16:21 - 16:23
    여기서 torch.max 함수를
    이용하여 예측해보면
  • 16:23 - 16:27
    예측된 값과 target.data를 비교하여
  • 16:27 - 16:32
    이 중에 몇 개가 맞는지 알 수 있습니다
  • 16:32 - 16:34
    총 합계를 계산하고
  • 16:34 - 16:36
    이를 전체 수로 나누면
  • 16:36 - 16:38
    얼마나 많은 예측이 맞았는지
  • 16:38 - 16:42
    백분율을 계산할 수 있습니다
  • 16:42 - 16:44
    max 함수를 좀 더 자세히 살펴봅시다
  • 16:44 - 16:46
    max 함수를 좀 더 자세히 살펴봅시다
  • 16:46 - 16:50
    이 예측값이 있다고 가정해 봅시다
  • 16:50 - 16:52
    이 max 함수는 2개를 반환합니다
  • 16:52 - 16:59
    가장 큰 값인 0.9와
    그 숫자의 인덱스입니다
  • 16:59 - 17:04
    0, 1, 2이죠
    2가 바로 0.9의 인덱스네요
  • 17:04 - 17:07
    그러므로 이 변수의 값은 2가 됩니다
  • 17:07 - 17:09
    여기서 이 출력값 예측을 위해
    우리가 하고자 하는 것은
  • 17:09 - 17:12
    여기서 이 출력값 예측을 위해
    우리가 하고자 하는 것은
  • 17:12 - 17:16
    classification
    즉 인덱스를 알아내는 것입니다
  • 17:16 - 17:19
    classification
    즉 인덱스를 알아내는 것입니다
  • 17:19 - 17:22
    인덱스 값만 알아내고 싶다면
    그냥 이것만 사용하면 됩니다
  • 17:22 - 17:29
    이게 바로 우리가 인덱스를 알아내기 위해
    [1]을 사용한 이유입니다
  • 17:29 - 17:32
    이렇게 정확도가 측정되는 것입니다
  • 17:32 - 17:35
    몇 개가 맞게 예측되었는지를 계산하고
  • 17:35 - 17:38
    이를 기반으로 백분율을 출력합니다
  • 17:38 - 17:41
    이것이 우리의 손실값들이구요
  • 17:41 - 17:44
    트레이닝에서, 이는 현재 epoch와 반복 수
    각 상황에서의 백분율을 출력하는 좋은 방법입니다
  • 17:44 - 17:47
    트레이닝에서, 이는 현재 epoch와 반복 수
    각 상황에서의 백분율을 출력하는 좋은 방법입니다
  • 17:47 - 17:49
    트레이닝에서, 이는 현재 epoch와 반복 수
    각 상황에서의 백분율을 출력하는 좋은 방법입니다
  • 17:49 - 17:51
    트레이닝에서, 이는 현재 epoch와 반복 수
    각 상황에서의 백분율을 출력하는 좋은 방법입니다
  • 17:51 - 17:55
    이것들은 트레이닝 손실입니다
  • 17:55 - 17:59
    이것은 아까 분리해뒀던 테스트셋을 이용한 테스트인데요
  • 17:59 - 18:01
    평균 손실이 약간 높긴 하지만
  • 18:01 - 18:04
    정확도는 아주 높습니다
  • 18:04 - 18:10
    간단한 신경망을 이용했는데도 97%입니다
  • 18:10 - 18:13
    만약 다중 레이블 예측이 필요하더라도
  • 18:13 - 18:14
    전혀 문제가 없습니다
  • 18:14 - 18:16
    그냥 CrossEntropyLoss를 사용하면 되거든요
  • 18:16 - 18:20
    마지막 레이어는 선형 출력을 할 것이고
  • 18:20 - 18:23
    이 출력들을 CrossEntropyLoss 함수로 넘기면
  • 18:23 - 18:26
    모든 게 해결됩니다
  • 18:26 - 18:28
    연습문제로, 우리는 이 URL에서 다운받을 수 있는
  • 18:28 - 18:31
    흥미있는 데이터를 활용하여
  • 18:31 - 18:34
    Softmax classifier를 만들어 볼 수 있습니다
  • 18:34 - 18:36
    물론 여러분이 이 데이터셋을 위한 DataLoader를
    직접 구현해 볼 수도 있습니다
  • 18:36 - 18:37
    물론 여러분이 이 데이터셋을 위한 DataLoader를
    직접 구현해 볼 수도 있습니다
  • 18:37 - 18:40
    물론 여러분이 이 데이터셋을 위한 DataLoader를
    직접 구현해 볼 수도 있습니다
  • 18:40 - 18:44
    다음 강의에서는 아주 중요한 신경망인
  • 18:44 - 18:45
    합성곱 신경망에 대해 알아보겠습니다
  • 18:45 - 18:47
    합성곱 신경망에 대해 알아보겠습니다
Title:
PyTorch Lecture 09: Softmax Classifier
Description:

more » « less
Video Language:
English
Duration:
18:47

Korean subtitles

Incomplete

Revisions