AI 101
๊ทธ๋ผ๋์ธํธ ๋์ผํธ๋ ๋ฌด์์ธ๊ฐ?

그라디언트 디센트란 무엇인가?
신경망이 어떻게 훈련되는지에 대해 읽어보셨다면, 거의 chắc chắn 그라디언트 디센트라는 용어를 전에 들어보셨을 것입니다. 그라디언트 디센트는 신경망의 성능을 최적화하는 주요 방법으로, 네트워크의 손실/오류율을 줄이는 것입니다. 그러나 그라디언트 디센트는 기계 학습에 새로 접하는 사람들에게 조금 어려울 수 있습니다. 이 기사는 그라디언트 디센트가 어떻게 작동하는지에 대해 정당한 직관을 제공하도록 노력할 것입니다.
그라디언트 디센트는 최적화 알고리즘입니다. 그것은 네트워크의 매개변수를 조정하여 네트워크의 예측과 실제/기대 값(손실이라고 함) 사이의 차이가 가능한 한 작게 되도록 네트워크의 성능을 개선하는 데 사용됩니다. 그라디언트 디센트는 초기 매개변수 값을 사용하고 미적분에 기반한 연산을 통해 네트워크를 가능한 한 정확하게 만드는 값으로 매개변수 값을 조정합니다. 그라디언트 디센트를 이해하기 위해 많은 미적분을 알아야 할 필요는 없지만, 그래디언트에 대한 이해는 필요합니다.
그래디언트란 무엇인가?
신경망이 만드는 오류를 나타내는 그래프가 있다고 가정해 보겠습니다. 그래프의 아래쪽은 오류가 가장 낮은 지점을 나타내고, 위쪽은 오류가 가장 높은 지점입니다. 우리는 그래프의 위쪽에서 아래쪽으로 이동하려고 합니다. 그래디언트는 오류와 신경망의 가중치 사이의 관계를 양적으로 나타내는 것입니다. 이 두 가지 사이의 관계는 기울기로 그래프할 수 있으며, 잘못된 가중치는 더 많은 오류를 발생시킵니다. 기울기/그래디언트의陡도는 모델이 얼마나 빠르게 학습하는지 나타냅니다.
陡한 기울기는 오류가 크게 줄어든다는 것을 의미하며, 모델이 빠르게 학습하고 있습니다. 그러나 기울기가 0이면 모델은 고원에 있으며 학습하지 못합니다. 우리는 그래디언트를 계산하여 모델의 매개변수에 대한 이동 방향(변화)을 결정할 수 있습니다.
우리는 조금 다른 비유를 사용해 보겠습니다. 언덕과 계곡의 연속이라고 상상해 보세요. 우리는 계곡의 가장 낮은 지점을 찾으려고 합니다. 언덕의 위쪽에서 시작할 때 우리는 큰 걸음으로 언덕을 내려갈 수 있으며, 가장 낮은 지점으로 향하고 있다고 확신할 수 있습니다.
그러나 계곡의 가장 낮은 지점에 가까워질수록, 우리의 걸음은 더 작아져야 합니다. 그렇지 않으면 실제로 가장 낮은 지점을 넘어설 수 있습니다. 마찬가지로, 네트워크의 가중치를 조정할 때, 조정은 실제로 네트워크를 가장 낮은 손실 지점으로부터 멀어지게 할 수 있습니다. 따라서 조정은 시간이 지남에 따라 더 작아져야 합니다. 계곡의 가장 낮은 지점으로 향하는 언덕을 내리며, 그래디언트는 우리가 따라야 할 경로와 걸음의 크기를 나타내는 벡터/지침입니다.
이제 그래디언트가 어느 방향으로 이동해야 하는지(어느 계수를 업데이트해야 하는지)와 어느 정도의 크기(계수가 얼마나 업데이트되어야 하는지)를 나타내는 지침임을 알았으므로, 그래디언트를 계산하는 방법을 살펴보겠습니다.
그래디언트 계산 및 그라디언트 디센트

그라디언트 디센트는 높은 손실 지점에서 시작하여 여러 번의 반복을 통해 가장 낮은 손실 지점을 찾으려고 합니다. 사진: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
그라디언트 디센트를 수행하려면 먼저 그래디언트를 계산해야 합니다. 그래디언트를 계산하려면 손실/비용 함수를 알아야 합니다. 우리는 비용 함수를 사용하여 도함수를 결정합니다. 미적분에서 도함수는 함수의 기울기를 나타내는 것이므로, 우리는 기본적으로 손실 함수에 기반한 언덕의 기울기를 계산하고 있습니다. 우리는 계수를 손실 함수에 넣음으로써 손실을 결정합니다. 손실 함수를 “f”라고 나타내면, 손실을 계산하는 방정식은 다음과 같습니다(우리는 단지 계수를 우리가 선택한 비용 함수에 넣는 것입니다).
손실 = f(계수)
그런 다음 우리는 도함수를 계산하거나 기울기를 결정합니다. 손실의 도함수를 얻는 것은 우리에게 어느 방향이 언덕을 올라가는지 또는 내려가는지에 대한 적절한 부호를 주어我们的 계수를 조정하는 데 도움이 됩니다. 우리는 적절한 방향을 “delta”라고 나타낼 것입니다.
delta = 도함수(손실)
우리는 이제 언덕의 가장 낮은 지점으로 향하는 방향을 결정했습니다. 이는 네트워크 매개변수의 계수를 업데이트하여 손실을 줄일 수 있음을 의미합니다. 우리는 이전 계수에서 적절한 크기의 변경(방향과 크기)을 뺀 값으로 계수를 업데이트합니다. 크기 조정의 크기를 제어하는 인자는 “학습률“이라고 하며, “alpha”라고 나타낼 것입니다.
계수 = 계수 – (alpha * delta)
그런 다음 우리는 네트워크가 가장 낮은 손실 지점 주변에서 수렴할 때까지 이 과정을 반복합니다.
학습률(alpha)을 올바른 값으로 선택하는 것은 매우 중요합니다. 선택된 학습률은 너무 작거나 너무 클 수 없습니다. 언덕을 내리며 가장 낮은 손실 지점에 접근할수록, 우리의 걸음은 더 작아져야 합니다. 그렇지 않으면 실제로 가장 낮은 손실 지점을 넘어설 수 있습니다. 또한 네트워크의 가중치를 조정할 때, 조정은 실제로 네트워크를 가장 낮은 손실 지점으로부터 멀어지게 할 수 있습니다. 따라서 조정은 시간이 지남에 따라 더 작아져야 합니다. 학습률이 너무 크면 네트워크의 성능은 가장 낮은 손실 지점 주변에서 계속해서 반복적으로 넘어설 수 있습니다. 이러한 경우 네트워크는 결코 실제 최적의 가중치 구성에 수렴하지 못합니다.
반면에, 학습률이 너무 작으면 네트워크는 최적의 가중치에 수렴하는 데 매우 오랜 시간이 걸릴 수 있습니다.
그라디언트 디센트의 유형
이제 그라디언트 디센트가 일반적으로 어떻게 작동하는지 이해했으므로, 그라디언트 디센트의 몇 가지 유형을 살펴보겠습니다.
배치 그라디언트 디센트: 이 형태의 그라디언트 디센트는 모든 훈련 샘플을 처리한 후에 계수를 업데이트합니다. 이 유형의 그라디언트 디센트는 가장 계산적으로 효율적인 형태일 가능성이 높습니다. 가중치는 전체 배치가 처리된 후에만 업데이트되므로 총 업데이트가 적습니다. 그러나 데이터셋에 많은 훈련 예제가 포함된 경우, 배치 그라디언트 디센트는 훈련 시간을 오래 걸릴 수 있습니다.
스토캐스틱 그라디언트 디센트: 스토캐스틱 그라디언트 디센트에서는 매번 그라디언트 디센트 반복과 매개변수 업데이트에서 단 하나의 훈련 예제만 처리됩니다. 이는 훈련 세트의 모든 항목에 대해 발생합니다. 매개변수가 업데이트되기 전에 단 하나의 훈련 예제만 처리되므로, 스토캐스틱 그라디언트 디센트는 배치 그라디언트 디센트보다 더 빠르게 수렴하는 경향이 있습니다. 그러나 큰 데이터셋의 경우, 이 프로세스를 모든 항목에 대해 수행하는 데 상당한 시간이 걸릴 수 있습니다.
미니 배치 그라디언트 디센트: 미니 배치 그라디언트 디센트는 전체 훈련 데이터셋을 더 작은 섹션으로 나누어 처리합니다. 네트워크를 통해 실행된 후에 계수를 업데이트합니다. 미니 배치 그라디언트 디센트는 스토캐스틱 그라디언트 디센트와 배치 그라디언트 디센트 사이의 중간 지점을 제공합니다. 모델은 배치 그라디언트 디센트의 경우보다 더 자주 업데이트되므로, 모델의 최적 매개변수에 대한 수렴이 약간 더 빠르고 더 강력합니다. 또한 스토캐스틱 그라디언트 디센트보다 계산적으로 더 효율적입니다.












