inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판] 파이썬 머신러닝 완벽 가이드

경사하강법을 통한 비용함수 RSS 최소화 - 파이썬 코드로 경사 하강법 구현하기

미니배치 확률적 경사 하강법

625

Jin

작성한 질문수 13

0

해당 강의와 책에서 미니 배치 확률적 경사하강법이 일반 경사하강법과 비교하였을 떄, 성능 또는 예측 오류 비용의 차이가 거의없으며, 전자가 샘플링을 했기때문에 더 빠른 시간안에 구해졌다고이해했습니다. 그런데 구현한 두 함수를 

time.time() 을 이용해서 시간 비교를  iters=100000 을 두고 했는데 경사하강법이 더 빠른 시간안에 결과를 도출하던데 

10만개의 데이터가 작아서 생기는 문제인가요 아니면 time 패키지를 써서 생기는 문제인가요 아니면 미니배치 확률적 경사하강법이 항상 빠른게 아닌 것 인가요?

+ 추가로, p300~301 예제에서 prev_cost 와 iter_index 는 왜 생성하신 건가요? 혹시 사용한 코드가 누락된게 아닐까요?

머신러닝 배워볼래요? 통계 python

답변 2

1

권 철민

loop 내에서 batch의 index를 가져오는 stochastic_random_index = np.random.permutation(X.shape[0]) 가 수행시간의 대부분을 차지하는 군요.

numpy에서 random에 관련된 좀 더 빠른 함수를 찾아봤는데, 매우 빠르게 처리하는 경우를 아직 찾지 못했습니다.

아래 소스와 같이 stochastic_random_index = np.random.permutation(X.shape[0]) 를 Loop 밖으로 빼면 수행 속도가 개선 됩니다.  훌륭한 지적 감사합니다.

import time

def stochastic_gradient_descent_steps(X, y, batch_size=10, iters=1000):
    w0 = np.zeros((1,1))
    w1 = np.zeros((1,1))
    prev_cost = 100000
    iter_index =0
    np.random.seed(0)
    start_time = time.time()

    # 수행 성능을 향상 시키기 위해 iteration loop 밖에서 batch의 index 계산.
    stochastic_random_index = np.random.permutation(X.shape[0])
    #print('start time:', start_time)
    for ind in range(iters):
        # 전체 X, y 데이터에서 랜덤하게 batch_size만큼 데이터 추출하여 sample_X, sample_y로 저장
        #stochastic_random_index = np.random.permutation(X.shape[0])
        sample_X = X[stochastic_random_index[0:batch_size]]
        sample_y = y[stochastic_random_index[0:batch_size]]
        # 랜덤하게 batch_size만큼 추출된 데이터 기반으로 w1_update, w0_update 계산 후 업데이트
        w1_update, w0_update = get_weight_updates(w1, w0, sample_X, sample_y, learning_rate=0.01)
        #w1_update, w0_update = get_weight_updates(w1, w0, X, y, learning_rate=0.01)
        w1 = w1 - w1_update
        w0 = w0 - w0_update
    
    print('end time:', time.time() - start_time)
    
    return w1, w0

0

권 철민

안녕하십니까,

지적하신대로 강의 설명과 다르게 경사하강법이 더 빠르게 동작하는 군요.

상기 내용은 제가 내용을 다시 검토후에 이번 주말까지 말씀드리겠습니다.

그리고 prev_cost, iter_index는 제가 디버깅용으로 작성한 변수인데 삭제를 안했습니다. 큰 의미가 없습니다.

좋은 지적 감사합니다.

안녕하세요 열심히 수강중인 학생입니다

0

59

2

정수 인덱싱

0

67

2

넘파이 오류

0

83

2

11강 numpy의 axis 축 질문 드립니다.

0

84

2

Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.

0

76

2

Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.

0

68

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

74

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

63

2

5강 강의 오류가 있어요.

0

82

1

실무에서 LTV 관련 모델 선택 질문입니다!

0

71

2

14강 강의 듣는중에 궁금한게 있어서 질문합니다~

0

68

3

파이썬 다운그레이 후 사이킷런 재설치

0

115

2

좋은 강의 감사합니다.

0

71

2

scoring 함수 음수값

0

66

2

6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?

0

98

2

분류 평가 정확도 예측

0

75

2

안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.

0

97

1

카카오톡 채널 있나요

0

105

1

혹시 강의에서 사용하시는 ppt 받을 수 있는건가요

0

187

2

pca 스케일링 관련하여 질문드립니다.

0

100

2

주피터 대신 구글 코랩

0

170

2

강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?

0

145

2

실루엣 스코어..

0

83

2

float64 null 값 처리 방법

0

101

2