Gradient Descent 탐색 방법

기계학습 2014.04.16 10:57

기본적인 함수 최적화(optimization) 방법 중 하나인 gradient descent 방법에 관한 글입니다.


Gradient descent 방법은 미분의 개념을 최적화 문제에 적용한 대표적 방법 중 하나로서 함수의 local minimum을 찾는 방법 중 하나입니다. Gradient descent 방법을 다른 말로 steepest descent 방법이라고도 부릅니다.



1. Gradient descent 방법의 직관적 이해


자신이 한치앞도 잘 안보이는 울창한 밀림에 있을 때 산 정상으로 가기 위한 방법은 간단합니다. 비록 실제 산 정상이 어디에 있는지는 모르지만 현재 위치에서 가장 경사가 가파른 방향으로 산을 오르다 보면 언젠가는 산 정상에 다다르게 될 것입니다.


또는 이와 반대로 깊은 골짜기를 찾고 싶을 때에는 가장 가파른 내리막 방향으로 산을 내려가면 될 것입니다.


이와 같이 어떤 함수의 극대점을 찾기 위해 현재 위치에서의 gradient 방향으로 이동해 가는 방법을 gradient ascent 방법, 극소점을 찾기 위해 gradient 반대 방향으로 이동해 가는 방법을 gradient descent 방법이라 부릅니다.



2. Gradient(그레디언트)


(gradient의 개념에 대해서는 Gradient, Jacobian 행렬, Hessian 행렬, Laplacian 글에서 설명한 바 있지만 설명의 연속성을 위해서 이곳에 다시 관련 내용을 적습니다)


어떤 다변수 함수 f(x1,x2,...,xn)이 있을 때, f의 그레디언트(gradient)는


 --- (1)


와 같이 정의됩니다. 즉, 그레디언트(gradient)는 위 식과 같이 각 변수로의 일차 편미분 값으로 구성되는 벡터입니다. 그리고 이 벡터는 f의 값이 가장 가파르게 증가하는 방향을 나타냅니다. 또한 벡터의 크기는 그 증가의 가파른 정도(기울기)를 나타냅니다.


예를 들어, f(x,y) = x2 + y2의 그레디언트(gradient)를 구해보면


--- (2)


이므로, (1,1)에서 f값이 최대로 증가하는 방향은 (2,2), 그 기울기는 ∥(2,2)∥= sqrt(8) 입니다.


<그림 1> f(x,y) = x2 + y2 그래프


또한 반대로 그레디언트(gradient)에 음수를 취하면 즉, -▽f는 f값이 가장 가파르게 감소하는 방향을 나타내게 됩니다.


이러한 그레디언트의 특성은 어떤 함수를 지역적으로 선형근사(linear approximation)하거나 혹은 함수의 극점(최대값, 최소값 지점)을 찾는 용도로 활용될 수 있습니다.



3. Gradient descent 방법


최적화 알고리즘 중 하나로 널리 알려진 gradient descent 방법은 이러한 그레디언트의 특성을 이용하여 어떤 비용함수의 값을 최소화시키기 위한 파라미터 값을 아래와 같이 점진적으로 찾는 방법입니다.


 --- (3)


즉, 어떤 초기값 x0 = (x10,...,xn0)부터 시작하여 위 식에 따라 gradient 반대 방향으로 x를 조금씩 이동시키면 f(x)가 극소가 되는 x를 찾을 수 있다는 방법이 gradient descent 방법입니다.


☞ 만일 함수의 극소점이 아니라 극대점을 찾는 것이 목적이라면 식 (3) 대신에 아래의 식 (4)를 이용하여 x를 업데이트합니다 (gradient ascent 방법)


 --- (4)


<그림 2> gradient descent 방법 (그림출처: 위키피디아)


식 (3)에서 λ는 알고리즘의 수렴속도를 조절하는 파라미터로서 step size 또는 learning rate라 불립니다.


Gradient descent 방법의 문제점은 쉽게 생각할 수 있듯이 local minimum에 빠지는 것입니다. 즉, 이쪽이 산 정상인줄 알고 열심히 올라갔더니 막상 여기는 작은 언덕 정도이고 바로 옆에 훨씬 높은 산이 있는 경우입니다.


Gradient descent 방법의 또 하나의 문제점은 해에 근접할수록 |∇f|가 0에 가까워지기 때문에 수렴속도가 느려진다는 것입니다. 그렇다고 수렴속도를 조절하는 step size 파라미터 λ를 너무 크게 하면 알고리즘이 발산할 수 있는 문제점이 있습니다 (step size를 자동으로 adaptive하게 조절하는 방법도 있는 것 같습니다).



4. Gradient descent 방법의 이해와 활용


Gradient descent 방법에 대해서는 그 기본적인 개념만 이해하고 있으면 된다고 생각합니다. 그 핵심은 함수의 극대값 또는 극소값을 구하기 위해 현재 위치에서 함수값의 변화가 가장 큰 방향으로 이동한다는 것이므로 함수값의 변화가 가장 큰 방향을 구할 수만 있다면 다양한 문제에 똑같은 개념을 적용할 수 있습니다.


[일변수 스칼라 함수의 극대, 극소 구하기]

즉, 다변수 스칼라 함수(scalar-valued function of multiple variables)의 경우에는 gradient(그레디언트)를 이용하여 최대 증가 방향을 찾았지만 일변수 함수의 경우에는 통상적인 일차 미분값 f'(x)을 이용하면 될 것입니다. 예를 들어, f(x) = x2 + 3x + 1가 극소가 되는 점 및 극소값을 구하고 싶다면 식을 다음과 같이 세울 수 있습니다.


--- (5)


[비선형 연립방정식의 풀이]

선형연립방정식으로 주어지는 Least Square 문제는 [선형대수학 #5] 선형연립방정식 풀이 글에서 설명한 바와 같이 SVD나 Pseudo-inverse를 이용하여 계산할 수 있습니다. 그리고 비선형연립방정식으로 주어지는 Least Square 문제는 뉴턴법/뉴턴-랩슨법의 이해와 활용(Newton's method) 글에서 설명한 Gauss-Newton 법으로 풀 수 있습니다. 여기서는 비선형연립방정식으로 주어지는 Least Square 문제를 gradient descent 방법으로 푸는 방법에 대해 살펴보겠습니다.


 --- (6)


식 (6)을 동시에 만족시키는 x = (x1,...,xn)을 구하는 문제는 결국 아래의 E를 최소화시키는 x를 구하는 LS(Least Square) 문제로 볼 수 있습니다.


--- (7)


단, F = [f1 ... fm]T는 F:Rn→Rm인 다변수 벡터 함수.


어떤 초기값(식 (7)의 E를 극소로 만드는 x에 대한 초기 추정값) x0 = (x10,...,xn0)부터 시작하여 아래와 같은 gradient descent 탐색을 반복하면 E의 극소점을 근사적으로 찾을 수 있습니다.


 --- (8)


그런데 ▽E를 직접 구하여 식 (8)을 적용해도 되지만, E = FTF 로부터 ▽E = 2JFTF 이므로 아래 식과 같이 F의 Jacobian인 JF를 이용하여 해를 탐색해도 됩니다.


--- (9)



5. 뉴턴 방법과 비교


Newton 방법은 뉴턴법/뉴턴-랩슨법의 이해와 활용(Newton's method) 글에서 설명한 바 있습니다만, 방정식(f = 0)의 해를 점진적으로 찾는 방법입니다. 즉, gradient descent 방법은 함수의 극대, 극소를 찾는 방법이고 Newton 방법은 함수값이 0이 되는 해를 찾는 방법입니다. 하지만 그 내부의 원리는 거의 유사하며(일차미분의 원리가 사용됨) 함수 f의 극대, 극소를 구하기 위해 gradient descent 방법을 직접 적용해도 되지만, f가 극대, 극소인 점은 f' = 0인 점이기도 하므로 뉴턴법으로 f' = 0인 점을 구해도 됩니다.


정리해 보면, 똑같은 함수 최적화 문제를 gradient descent 방법으로도 풀 수 있고, 뉴텁법(Newton's method)이나 가우스-뉴턴법(Gauss-Newton method)으로도 풀 수 있음을 알수 있습니다. 어떤 방법이 더 효율적인지는 저도 잘 모릅니다. 다만, 한가지 gradient descent 방식과 가우스-뉴턴법의 차이를 살펴보면 gradient descent 방법은 step size 파리미터 λ가 필요한 반면에 뉴턴법(뉴턴-랩슨법)이나 가우스-뉴턴법의 경우는 step size 파라미터가 필요 없다는 점입니다. 그 이유는 뉴턴법 계열에서는 현재의 함수값과 미분값(기울기)으로부터 step size를 자동으로 결정하기 때문입니다. 또한, 뉴턴법 또는 가우스-뉴턴법은 해를 찾는 수렴속도가 빠르고 해 근처에서 수렴속도가 급격히 느려지는 문제점도 없습니다. 따라서, 개인적인 생각으로는 (확실치는 않지만) 함수 최적화 문제에 있어서 gradient descent 방법보다는 뉴턴법 계열이 좀더 효율적이지 않나 생각됩니다. 하지만 뉴턴법으로는 f'(x) = 0인 x를 구하기 때문에 극대, 극소를 구분하여 찾을 수 없고, 또한  f'(x) = 0이라 해서 반드시 f가 해당 지점에서 극점인 것은 아니므로 Hessian 테스트 등과 결합하여 사용해야 할 것입니다.


☞ Hessian 테스트는 f'(x)=0인 지점에서 Hessian 행렬의 고유값들을 구한 후 고유값들의 부호를 조사하여 극대, 극소 여부를 판별하는 테스트임. 자세한 내용은 Gradient, Jacobian 행렬, Hessian 행렬, Laplacian 글을 참조하기 바랍니다.



by 다크 프로그래머


  • BlogIcon Readiz 2014.04.16 11:20 신고 ADDR 수정/삭제 답글

    이번학기에 컴퓨터비전 수강중인데.. 너무 도움이 됩니다. 감사합니다.. ^^

    • BlogIcon 다크pgmr 2014.04.16 14:07 신고 수정/삭제

      컴퓨터 비전에 발을 들어놓으시는 분들이 많아지니 좋습니다. 계속 도움이 되었으면 좋겠네요 ^^

  • Regia 2014.04.21 13:03 신고 ADDR 수정/삭제 답글

    현재 대학원 컴퓨터비전 및 패턴인식 연구실에서 공부 중인 학생입니다.
    딥러닝쪽을 공부하다가 다크님 홈페이지까지 방문하게 되었습니다.
    체계적이고 쉽게 정리된 블로그가 무척 인상 깊습니다.
    내용이 쉽게 이해되는 까닭은
    내용을 정리한 이가 그만큼 본질을 가까이에서 바라보고 있음을 뜻함이라 생각합니다.

    좋은 블로그와 다크님을 알게되어서 기쁨니다.
    오늘도 행복한 하루되시기를 희망합니다.

    • BlogIcon 다크pgmr 2014.04.21 13:34 신고 수정/삭제

      안녕하세요. 반갑습니다.
      글을 쓸때 가급적 단순한 사실, 방법론을 정리하기 보다는 시각, 관점을 전달하려고 노력하고 있습니다. 그리고 이러한 점을 알아주는 댓글을 보면 저도 기쁩니다. 댓글 감사합니다.

  • jj 2014.08.09 22:04 신고 ADDR 수정/삭제 답글

    안녕하세요. 정말 도움되는 글 많이 작성해 주셔서 감사합니다.
    본 글에서 질문이 있습니다. E = FT(위첨자)F 로부터 ▽E = 2JF(아래첨자)T(위첨자)F 라고 하셨는데 어떻게 이렇게 되는지 설명 가능하신지요..그리고 뉴턴법으로는 f'(x) = 0 인 x를 구하는것이라 하셨는데 뉴턴법/뉴턴-랩슨법의 이해와 활용(Newton's method)내용에는 분명 연립방정식의 근을 구할때 사용할 수 있다고 되어 있었습니다. 이말은 f(x) = 0 인 x를 근사하게 찾는다는 애기 아닌가요??

    • BlogIcon 다크pgmr 2014.08.10 00:39 신고 수정/삭제

      E=f1^2+f2^2+...fm^2 인데, ∂E/∂xi = ∑_j (2*fj*∂fj/∂xi) 이므로 ▽E = (∑_j (2*fj*∂fj/∂x1), ∑_j (2*fj*∂fj/∂x1), ..., ∑_j (2*fj*∂fj/∂xn))입니다. 그런데, 조금만 계산을 해 보면 ▽E가 2JF(아래첨자)T(위첨자)F와 동일함을 확인하실 수 있을 것입니다.
      그리고, 뉴턴법 부분은 제가 글에서 말씀드린 맥락은 어떤 함수 f(x)의 극대, 극소를 구하는 문제는 gradient descent로 풀수도 있지만 뉴턴법으로도 풀수 있다는 것이었습니다. 왜냐하면 함수 f(x)가 극대, 극소인 점은 결국 f'(x) = 0인 점이므로 방정식 f'(x) = 0해를 뉴턴법으로 구하면 되기 때문입니다. (f(x) = 0도 방정식이지만 f'(x) = 0도 역시 방정식이고 f''(x) = 0 도 또한 방정식입니다. 따라서, f(x) = 0의 해를 구하는데 뿐만 아니라 f'(x) = 0의 해를 구하는데도 뉴턴법을 사용할수 있습니다)

  • jj 2014.08.11 11:30 신고 ADDR 수정/삭제 답글

    답변 너무 감사합니다. 제가 Multiple View Geometry의 Iterative Estimation Method부분을 공부중인데 가능하시다면 Levenberg-Marquardt iteration 방법에 대해서도 Newton법이나 Gradient Descent 처럼 글을 작성해 주실수 있으신가요?? Multiple View Geometry책을 봐서는 잘 이해가 안되서 애를 먹고 있네요ㅠㅠㅠ

  • 뚜버기 2014.11.07 23:06 신고 ADDR 수정/삭제 답글

    안녕하세요^^ 막 이 분야에 발을 딛은 석사 1학기 대학원생입니다. 제가 실제로 gradient descent코드를 짜서 실행을 해보았는데요. iteration이 1000번을 초과하거나, 새로운 x값이 이전 스텝의 x값과 별 차이가 없으면 iteration을 종료하도록 코드를 짰습니다. 그런데 어떤 함수에서 step size가 0.2일때는 local minimum이 찾아지는데 0.4일때는 1000번의 iteration을 거쳐 찾은 x값이 매우 크고, 그래서 그값을 넣으면 함수가 Infinite로 가버리더라구요. "수렴속도를 조절하는 step size 파라미터 λ를 너무 크게 하면 알고리즘이 발산할 수 있는 문제점이 있습니다" 라는게 그 지금 제 상황인거 같은데, 이런 문제는 왜 발생하는건지 여쭤보고싶습니다 ^^

    • 뚜버기 2014.11.09 10:24 신고 수정/삭제

      앗 스스로 알아냈습니다^^; step size가 크면 over shot되서 오목한 그릇(?)모양의 그래프일 경우 발산하네요 ^ㅁ^

    • BlogIcon 다크pgmr 2014.11.09 19:33 신고 수정/삭제

      어떻게 댓글을 달아야 하나 난감했는데 스스로 답을 찾으셨다니 다행입니다.

  • 매틀랩도전 2014.11.08 20:56 신고 ADDR 수정/삭제 답글

    매틀랩으로 연립방정식을 푸는데요 여기저기 방법찾아봐서 겨우 다 식을 세웟는데요 값을 도출하는 부분에서 오류가나요 예를들어서 미지수3개이고 식이 3개인 연립방정식을 푼다고 칩시다. 근데 하나의 식이 다른 식의 실수배이거나 아무튼 그런식으로식 하나가 의미가 없어질 때 해가 무수히 많은경우가 생기자나요.

    이런 경우에 matlab에서 오류가 생기더라구요. 답이 너무 많아서 못정하겟다고.ㅜㅜ
    이거 해결하는 방법있나요??
    (사실 제가 eig안쓰고 고유값까지는 구햇는데 이걸가지고 고유벡터구하는게 안되네요)

    %syms a1 a2 a3
    %tmp1=(ramda(1)*I-A);
    %
    %tmp2=[a1;a2;a3];
    %f1=tmp1(1,:)*tmp2(:,1);
    %f2=tmp1(2,:)*tmp2(:,1);
    %f3=tmp1(3,:)*tmp2(:,1);
    %[a1 a2 a3]=solve(f1,f2,f3); <== 여기서 해를 못 정합니다. matlab이 ㅠㅠ
    %double(a1); double(a2); double(a3);

    • 뚜버기 2014.11.09 09:26 신고 수정/삭제

      그런 경우에는 매틀랩을 이용해서 뿐만이 아니라, 사람도 해를 찾을 수 없는거 아닌가요?^^ 연립 방정식들의 앞의 계수를 비교해서 이럴 경우에에, 'Error' 함수를 이용해서 입력한 식으로는 "유일해"를 찾을 수 없습니다 라는 에러를 표시하는 코드를 추가하던지, 아니면 'xx 조건을 만족하는 값들을 해로 가진다' 라는 문장을 추가하는것이 수학적으로 옳지 않나요? 예를들면 x + y + z = 1, 2x + 2y + 2z = 2, x + y + 2z = 2 라는 조건을 입력하게 되면, z = 1, x = -y를 만족하는 모든쌍, 즉 (-1,1,1) 이라던지 (-2,2,1) 또는 (0.0,1)이 해가 되는거잖아요? 이럴때는 " x = -y, z = 1" 라는 답이 출력해 나오도록 코드를 짜야 할 것 같은데요~!

    • BlogIcon 다크pgmr 2014.11.09 19:31 신고 수정/삭제

      제가 해보니 [x, y, z] = solve('2*x+y+3*z=2','x+y+2*z=1','2*x+2*y+4*z=2')의 경우에는 x=1-z, y=-z, z=z라고 해를 찾아주네요. 해를 찾아주는 경우도 있고 못찾아 주는 경우도 있는 것 같습니다.

  • BlogIcon 진국 : ) 2016.03.20 22:00 신고 ADDR 수정/삭제 답글

    검색을 하다보면 항상 이 블로그로 Gradient 하게 되네요 ㅎㅎ. 이렇게 유용한 정보를 쉽게 볼 수 있다는 사실에 정말 감사합니다. 자주 찾아뵙겠습니다

  • 명태 2016.04.12 17:46 신고 ADDR 수정/삭제 답글

    최적화 공부하고 있는 수학과 대학원생입니다.
    원서 text가 주는 abstract한 면만 그리다 너무 이해가 안되서
    검색하다가
    굉장히 좋은 설명과 예시에 무릎을 탁 치고 갑니다.!

    • BlogIcon 다크pgmr 2016.04.13 02:50 신고 수정/삭제

      원서가 어렵긴 하죠 ^^ 저희 언어로 된 좋은 책들이 많이 나왔으면 좋겠습니다.

  • 우와 2016.11.18 20:15 신고 ADDR 수정/삭제 답글

    다크님!!! 정말 큰 도움이 되었어요~!
    어렴풋이 경사하강법에 대해 알고 있다가 이번에 확실히 배워갑니다!
    심지어 2014년도에 쓰셨다니!!!!

  • 롬파워 2017.04.09 04:42 신고 ADDR 수정/삭제 답글

    안녕하세요 딥러닝 막 공부를시작한 초짜입니다..
    학부때 선형대수를 안들엇더니 따라가기가 벅찬와중에 좋은 블로그알게되어 너무기쁩니다.
    한가지 아무리생각해도 궁금한것은..
    2차함수의 미분은 어떤x값에따른 함수의 기울기를 (변화량)의미하는 식이 나오잖아요?
    그 변화량을 x에서 빼주는것이 어떤의미가 있는것인지 잘 와닿지가 않습니다.

    변화량일뿐인데 막 x에서 빼도되나? 그런생각뿐이네요.. 초보에게 와닿는 설명을 부탁드려도될까요.?

    • BlogIcon 다크pgmr 2017.04.09 13:02 신고 수정/삭제

      그레디언트는 함수가 가장 가파르게 증가하는 방향에 대한 벡터이니 그레디언트 방향으로 x를 이동시키면 함수값이 증가합니다. 그리고 그레디언트 반대방향으로 x를 이동시키면 함수값이 감소하게 됩니다. 이것이 기본적인 그레디언트 디슨트 방법의 원리입니다. 그런데, 말씀하신 내용은 그레디언트 대신에 기울기로서 이 식을 이해하고자 하면 잘 이해가 안간다는 말씀이지요? 일차미분(기울기)에도 부호가 있습니다. +면 함수가 증가하고 있다는 것이고 -면 함수가 감소하고 있다는 것입니다. 따라서, 현재 지점에서 함수값을 감소시키기 위해서는 즉, 최소화 문제를 풀기 위해서는 x를 기울기 부호의 반대 방향으로 이동시켜야 합니다. 그러면 일차미분의 부호만 사용하면 되지 왜 그 값의 크기까지 x를 이동시키는데 사용하느냐가 의문이 될 수 있습니다. 생각해 보면 어떤 지점에서 함수의 기울기가 크다면(가파르다면) 한 동안은 그 함수가 그대로 증가 또는 감소할 가능성이 높습니다. 따라서 그 방향으로 성큼 성큼 이동해도 정상(또는 웅덩이)를 지나칠 확률이 낮습니다. 하지만 반대로 기울기가 0에 가깝다면 그 근처에 정상 또는 웅덩이가 있을 확률이 높습니다. 따라서 그 경우에는 x를 조심스럽게 이동하면서 정상(웅덩이)을 찾는 것이 좋습니다. 즉, 일차미분의 부호 뿐만 아니라 그 크기까지 반영해서 x를 이동시키는 것이 효율적입니다. 그리고 이러한 원리들이 반영된 최적화 기법이 gradient descent 방법입니다. 그런데, 일차미분을 그대로 step size로 하는 것은 너무 이동량이 크기 때문에 실제 문제에서는 일차미분에 (1보다 작은) 가중치 상수를 곱해서 빼줍니다. 식 (3)에 있는 lambda가 이 가중치입니다.

  • 도서관알바생 2017.05.04 17:16 신고 ADDR 수정/삭제 답글

    글이 굉장히 잘 정리되어있네요. 이해하기 쉽게 적어주셔서 감사합니다.
    두가지 궁금한 점이 있는데요. 선형 회귀문제를 해결하기 위한 방법으로 Gradient descent 방식과 뉴턴법을 비교했을 때, 데이터량이나 특성에 따라 두 방법중에 더 효율적인 방법이 나뉘는 경우가 있을까요? 제가 본 다른 자료에서 어떤 경우는 Gradient descent가 전체 데이터 값의 행렬계산이 적기때문에 learning rate만 잘 조절한다면 메모리사용이나 복잡도면에서 더 효율적일 수 있다고 하더라구요. 그리고 또 한가지 궁금한점은 뉴턴법으로 구해지는 기울기(?)와 바이어스 벡터가 코스트가 가장 적은 경우라는걸 어떻게 알 수 있냐는 것입니다. 제가 아직 머신러닝을 시작하는 단계라 두 가지 방법의 비교 분석을 찾고 있는데 잘 찾아지지가 않네요..ㅠㅠ

    • BlogIcon 다크pgmr 2017.05.04 17:48 신고 수정/삭제

      일반적으로는 뉴턴법이 보다 효율적인 방법으로 볼 수 있습니다. 두 방법의 차이에 대해서는 http://darkpgmr.tistory.com/149 글을 참조하시기 바랍니다.

    • 도서관알바생 2017.05.08 12:08 신고 수정/삭제

      감사합니다.

  • 리미티드 2017.07.08 00:33 신고 ADDR 수정/삭제 답글

    안녕하세요, 글 잘 읽었습니다.
    본 포스트에서 질문이 있는데요, 이 경사 하강법은 인공지능 분야에서 어디에서 이용하는지 예시를 알 고 싶습니다.
    예를 들어서 베이즈는 스팸 차단 같은 분야에서 씌이는 것처럼 말이죠

    • BlogIcon 다크pgmr 2017.07.08 07:04 신고 수정/삭제

      답변이 곤란한 질문인데요.. 마치 미분, 적분이 물리학 분야에서 어디에 사용되는지와 유사한 질문입니다 ^^. 인공지능이란 기계(컴퓨터)가 지능을 갖도록 하는 것이데, 그러기 위해서는 학습(machine learning)의 과정이 필요합니다. 학습은 정답을 알고 있는 데이터들을 이용해서 인공지능이 스스로 답을 맞추도록 하는 과정인데, 그 과정에서 에러(오답)를 줄이기 위해 경사하강법, 뉴턴법 등의 함수 최적화 기법들이 사용될 수 있습니다. 함수최적화 기법에 대해서는 http://darkpgmr.tistory.com/149 글을 읽어보면 도움이 됩니다. 결국, 인공지능의 어떤 특정 분야(응용)에 사용된다기 보다는 인공지능이 인공지능이 되기 위해서 필요한 학습 과정에 주로 활용된다고 볼 수 있습니다.