미니배치 확률적 경사 하강법
625
작성한 질문수 13
해당 강의와 책에서 미니 배치 확률적 경사하강법이 일반 경사하강법과 비교하였을 떄, 성능 또는 예측 오류 비용의 차이가 거의없으며, 전자가 샘플링을 했기때문에 더 빠른 시간안에 구해졌다고이해했습니다. 그런데 구현한 두 함수를
time.time() 을 이용해서 시간 비교를 iters=100000 을 두고 했는데 경사하강법이 더 빠른 시간안에 결과를 도출하던데
10만개의 데이터가 작아서 생기는 문제인가요 아니면 time 패키지를 써서 생기는 문제인가요 아니면 미니배치 확률적 경사하강법이 항상 빠른게 아닌 것 인가요?
+ 추가로, p300~301 예제에서 prev_cost 와 iter_index 는 왜 생성하신 건가요? 혹시 사용한 코드가 누락된게 아닐까요?
답변 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





